我需要显示特定仓库当前库存中的所有产品,以及产品表中的所有产品。这将包括库存量。如果该产品未在特定仓库的库存中列出,则需要显示0.如何检索库存中的所有产品,以及SQL中的所有产品?
产品表中有33种不同的产品。这是我用来查找该信息的查询:
SELECT DISTINCT ID
FROM S_PRODUCT;
我正在查看的仓库专门包含14个产品。这是我用来查找的查询。
SELECT PRODUCT_ID
FROM S_INVENTORY
WHERE WAREHOUSE_ID = 301;
我的最终结果应该列出所有33个产品ID,但只显示仓库301库存中物料的数量。所有不在该库存中的产品应该显示数量为0。我尝试过外连接和其他杂项查询,但没有运气。请帮忙!我应该注意到我正在使用oracle。在ERD
尝试与外表的
截图加入&的情况。
SELECT I.PRODUCT_ID,
CASE I.AMOUNT_IN_STOCK
WHEN NULL
THEN 0
ELSE I.AMOUNT_IN_STOCK
END AS "IN_STOCK"
FROM S_PRODUCT P
LEFT OUTER JOIN
S_INVENTORY I
ON P.ID = I.PRODUCT_ID
WHERE I.WAREHOUSE_ID = 301;
PRODUCT_ID IN_STOCK
---------- ----------
20510 69
20512 28
30321 85
30421 102
30433 35
32779 102
32861 57
40421 70
40422 65
41010 59
41020 61
41050 49
41080 50
41100 42
14 rows selected
使用AND代替WHERE 注尝试:的空行也输出的一部分
PRODUCT_ID IN_STOCK
---------- ----------
20510 69
20512 28
30321 85
30421 102
30433 35
32779 102
32861 57
40421 70
40422 65
41010 59
41020 61
41050 49
41080 50
41100 42
33 rows selected
如果你需要两个表中的ALL,你不需要一个完整的外连接吗?另外,或者将where子句移动到连接或使用或者'(i.warehouse_ID = 301或者i.warehouse_ID为空)'Misread。只需将您的where子句移动到联接。否子句需要。 – xQbert 2014-08-27 16:13:01
更新了我的答案以解决缺少的信息。查询现在返回正确的数据,我们现在只需要正确显示。 – 2014-08-27 16:59:23