a表更新B表

wo888 2007-09-03 11:22:32
我有两个表的结构和数据如下:
表一:
订单号 产品编号 物料编号 库存数
0001 1254 11212 0
0001 1254 11213 0
0001 1254 11257 0

表二:
订单号 产品编号 物料编号 库存数
0001 1254 11212 9
0001 1254 11213 50

我想要的结果是:
用一条查询语句得到如下结果

订单号 产品编号 物料编号 库存数
0001 1254 11212 9
0001 1254 11213 50
0001 1254 11257 0
即,以订单号,产品编号,物料编号为关键字,用表二的库存去更新表一的库存数,表二中不存在的数据表一的库存数自动为0.
请教哪位高人,这句查询SQL应该如何写,怎么写速度更快???
...全文
413 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bolome 2008-07-28
  • 打赏
  • 举报
回复
帮顶
dancun 2007-09-25
  • 打赏
  • 举报
回复
ding
yaocf 2007-09-21
  • 打赏
  • 举报
回复
1.先union all
2.group by 订单号,产品编号
liuzi123 2007-09-13
  • 打赏
  • 举报
回复
楼上
wyjam 2007-09-05
  • 打赏
  • 举报
回复
左连接是一个好方法,但是发现ORACLE9之前的版本对左右连接不是很支持的来说。左连接后的列数是原来的(A表的列数+B表的列数)
表一:                  表二:
订单号 产品编号 物料编号 库存数  订单号 产品编号 物料编号 库存数
0001 1254 11212 0    0001 1254 11212 9
0001 1254 11213 0    0001 1254 11213 50
0001 1254 11257 0    0001 1254 11213 50 
0001 1254 11212 0    0001 1254 11213 50
0001 1254 11213 0    0001 1254 11213 50
0001 1254 11257 0    0001 1254 11213 50

如果是A表更新B表,用UPDATE就足够解决问题(如二楼),不考虑执行速度),
如果是A表和B表查询得出C表,如楼上,
fufengchun 2007-09-04
  • 打赏
  • 举报
回复
Select a.订单号,a.产品编号,a.物料编号,
nvl(b.库存数,0) as 库存数
from 表一 a Left Join 表二 b on
a.订单号=b.订单号 and a.产品编号=b.产品编号
and a.物料编号=b.物料编号


这条语句比较简洁,用到了左连接,也能很好的实现楼主的功能,不过第二种方法太复杂也不实用,假如:订单号 产品编号 物料编号 在一个表中每一天纪录都不相同了。
wwq15947619971 2007-09-04
  • 打赏
  • 举报
回复
up
wo888 2007-09-03
  • 打赏
  • 举报
回复
标题我写错了,我希望用SELECT查询得到第三个表,不知道应该如何写,在查询过程中,如果表二在表一中没有的数据,自动将库存显示为0! 谢谢了!
WangZWang 2007-09-03
  • 打赏
  • 举报
回复
Select a.订单号,a.产品编号,a.物料编号,
nvl(b.库存数,0) as 库存数
from 表一 a Left Join 表二 b on
a.订单号=b.订单号 and a.产品编号=b.产品编号
and a.物料编号=b.物料编号
wo888 2007-09-03
  • 打赏
  • 举报
回复
我想用查询得到结果,select
WangZWang 2007-09-03
  • 打赏
  • 举报
回复
update 表一 set 库存数 =(select t.库存数 from 表二 t
where t.订单号=表一.订单号 and t.产品编号=表一.产品编号
and t.物料编号=表一.物料编号)
mantisXF 2007-09-03
  • 打赏
  • 举报
回复
SQL> select t1.orderId,
2 t1.proId,
3 t1.matId,
4 nvl(t2.mount,0) as mount
5 from (select '0001' as orderId,'1254' as proId,'11212' as matId,0 as mount from dual
6 union all
7 select '0001' as orderId,'1254' as proId,'11213' as matId,0 as mount from dual
8 union all
9 select '0001' as orderId,'1254' as proId,'11257' as matId,0 as mount from dual
10 )t1,
11 (
12 select '0001' as orderId,'1254' as proId,'11212' as matId,9 as mount from dual
13 union all
14 select '0001' as orderId,'1254' as proId,'11213' as matId,50 as mount from dual
15 )t2
16 where t1.orderId = t2.orderId(+)
17 and t1.proId = t2.proId(+)
18 and t1.matId = t2.matId(+);


ORDERID PROID MATID MOUNT
------- ----- ----- ----------
0001 1254 11212 9
0001 1254 11213 50
0001 1254 11257 0

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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