SQL如何在不加入

时间:2015-08-06 10:50:38

标签: sql oracle

我有三张桌子。一个是工作人员,一个是计划中的材料,另一个是已发布的材料。

T1:工作订单

WONUM

T2:计划材料

WONUM,ITEM,QUANTITY

T3:发布材料

WONUM,ITEM,QUANTITY

我已设法选择所有有物料计划的工作人员但没有通过简单退出查询发出的材料(我们无法连接表格)。

 and exists (select * from T2 where T2.WONUM = T1.WONUM)
 and not exists (select * from T3 where T3.WONUM = T1.WONUM)

我还可以选择具有大部分相同基本查询的材料的工作人员。

 and exists (select * from T2 where T2.WONUM = T1.WONUM)
 and exists (select * from T3 where T3.WONUM = T1.WONUM)

但我现在想要的是select all workorders from T1 where the sum of T3.QUANTITY + T2.QUANTITY is 0。 (T3.QUANTITY包含例如-3,如果已发布3个单位

我不允许使用JOIN来创建视图,所以我必须做一些嵌套查询。 我还尝试将DUAL表用于sum,但它只能处理1行。

2 个答案:

答案 0 :(得分:2)

您可以这样做:

 and ((select SUM(t2.quantity) from T2 where T2.WONUM = T1.WONUM) +
      (select SUM(t3.quantity) from T3 where T3.WONUM = T1.WONUM)
     ) = 0

实际上,由于可能无法匹配,您需要处理NULL值:

 and (coalesce((select SUM(t2.quantity) from T2 where T2.WONUM = T1.WONUM), 0) +
      coalesce((select SUM(t3.quantity) from T3 where T3.WONUM = T1.WONUM), 0)
     ) = 0

答案 1 :(得分:0)

请尝试: SELECT CASE WHEN NVL (((SELECT SUM (NVL (T2.QUANTITY), 0) FROM T2 WHERE T2.WONUM = T1.WONUM) + (SELECT SUM (NVL (T3.QUANTITY), 0) FROM T3 WHERE T3.WONUM = T1.WONUM), 0) = 0) THEN T1.WONUM ELSE NULL AS FOO FROM T1; 对不起,我没试过。我正在快速移动的码头上用小型安卓手机打字。