我有两个表的结构和数据如下:
表一:
订单号 产品编号 物料编号 库存数
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应该如何写,怎么写速度更快???
表一:
订单号 产品编号 物料编号 库存数
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应该如何写,怎么写速度更快???
解决方案 »
- 导出表结构的问题
- 求这个sql语句该如何改写,才能解决
- 请问ORACLE监控脚本不能发EMAIL的问题~!
- oracle触发器中NEW_VALUE和OLD_VALUE的问题。。谢谢大家了
- SQL2000存储过程声明变量了,但却报没声明的错误
- 选择当月每天的销售单量,select出的结果有2天没数据的没显示,怎么让没数据的那几天显示0?
- 高分求:提供JAVA连接ORACLE的脚本例子
- ORACLE中有取整函数或四舍五入函数吗??????急!!!!!!!!!
- Oracle在OEM中怎么管理数据库里面的内容?(有没有这方面的书--图形化界面)
- [转载] 软件开发中的Bug跟踪管理
- 不同数据库间的访问问题???????? 在线急等啊 ????
- oracle817的control文件损坏了,现在启动不了,如何恢复
where t.订单号=表一.订单号 and t.产品编号=表一.产品编号
and t.物料编号=表一.物料编号)
nvl(b.库存数,0) as 库存数
from 表一 a Left Join 表二 b on
a.订单号=b.订单号 and a.产品编号=b.产品编号
and a.物料编号=b.物料编号
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
nvl(b.库存数,0) as 库存数
from 表一 a Left Join 表二 b on
a.订单号=b.订单号 and a.产品编号=b.产品编号
and 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表,如楼上,
2.group by 订单号,产品编号