求SQL语句

gangnet 2012-12-08 09:47:06
问题是这样的:
表A 有字段 aid, atime, aname
表B 有字段 bid, btime, bname
表C 有字段 aid, bid

现在要求:
批量修改atime, aname,要求 修改为 atime = btime(日期部分) + atime(时间部分)
请问这样的语句怎么写?
如果不能用语句,用存储过程也可以?
...全文
105 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mutoujuelian 2012-12-10
  • 打赏
  • 举报
回复
引用 4 楼 gangnet 的回复:
感谢2位! 这个可以的,但是现在有个更复杂的: 表A 有字段 aid, atime, aname 表B 有字段 bid, btime, bname 表C 有记录 cid, ctime1 表C 有记录 cid, ctime2 表D 有字段 aid, bid 发现用mutoujuelian 方法 总是说 单行子查询返回多个值; 就是说要一次修改 表C 的 cid 为……
嘿,我那条SQL是一对一的情况下可以更新,一对多的确不行。这个可能需要写个数据库函数处理比较方便,函数我不会写哎。 大体的意思是传给函数AID,BID,CID与A、B的关联,然后在函数中获取各个字段的内容,进行拼接。
gangnet 2012-12-09
  • 打赏
  • 举报
回复
怎么不能加分?!
gangnet 2012-12-09
  • 打赏
  • 举报
回复
感谢2位! 这个可以的,但是现在有个更复杂的: 表A 有字段 aid, atime, aname 表B 有字段 bid, btime, bname 表C 有记录 cid, ctime1 表C 有记录 cid, ctime2 表D 有字段 aid, bid 发现用mutoujuelian 方法 总是说 单行子查询返回多个值; 就是说要一次修改 表C 的 cid 为某个值时 多条记录有问题
izj 2012-12-08
  • 打赏
  • 举报
回复
我现在没环境,没测试过。。你试试。。


merge into a
using (
  select * from b ,c where b.bid = c.bid 
 ) d
on (a.aid = d.aid )
when matched then 
  update set a.atime =  trunc(b.btime(日期部分),'yyyy-mm-dd') || trunc(a.atime(时间部分),'hh:mi:ss')

你自己把日期截取下。。用trunc 函数
gangnet 2012-12-08
  • 打赏
  • 举报
回复
非常感谢;我试试!
mutoujuelian 2012-12-08
  • 打赏
  • 举报
回复
UPDATE A SET 
ATIME=(SELECT A.ATIME|| ' ' || B.BTIME FROM A , B , C WHERE A.AID=C.AID AND B.BID=C.BID) 
, ANAME=(SELECT A.ANAME|| ' ' || B.BNAME FROM A , B , C WHERE A.AID=C.AID AND B.BID=C.BID)
WHERE AID IN (SELECT A.AID FROM A,B,C WHERE A.AID=C.AID AND B.BID=C.BID)
这种应该可以。 我以前用过在update后面加子查询的。mysql不行,oracle好像可以。 你试一下。当然,这个我都默认为字符串了。如果ATIME和BTIME都是日期类型的话,你需要先将 日期转字符to_char(ATIME),然后截取前面一部分, BTIME同样处理,截取后面一部分, 然后在字符拼接起来,然后再to_date('结果字符','格式化类型')

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧