我有三張桌子:
文章 :
idArticle
libArticle
股票 :
idArticle
idWarehouse
qtyStock
倉庫 :
idWarehouse
libWarehouse
在庫存表中,我只有可用的文章 所以,例如,如果資料是:
文章 :
890001 'Article1'
890002 'Article2'
倉庫 :
0001 'Warehouse Est'
0002 'Warehouse West'
0003 'Warehouse South'
股票 :
890001 0001 50
890001 0002 30
890002 0003 20
我想發出一個請求,顯示每件商品的數量,如果沒有庫存,則數量為“0”,每個倉庫都有一行,例如:
890001 0001 50
890001 0002 30
890001 0003 0
890002 0001 0
890002 0002 0
890002 0003 20
我試過 :
select a.idwarehouse, a.idarticle, s.qtystock from
(
select idwarehouse, idarticle
from article, warehouse
where idarticle IN ('890001', '890002')
) a
left join stock s on a.idwarehouse = s.idwarehouse and a.idarticle = s.idarticle
它有效,但是沒有那種子請求有沒有更好的方法來做到這一點?
uj5u.com熱心網友回復:
結果可以通過簡單CROSS JOIN的物品和倉庫獲得所有組合,然后進行LEFT JOIN庫存來實作。
WITH
article (idarticle, libarticle)
AS
(SELECT '890001', 'Article1' FROM DUAL
UNION ALL
SELECT '890002', 'Article2' FROM DUAL),
stock (idarticle, idwarehouse, qtystock)
AS
(SELECT '890001', '0001', 50 FROM DUAL
UNION ALL
SELECT '890001', '0002', 30 FROM DUAL
UNION ALL
SELECT '890002', '0003', 20 FROM DUAL),
warehouse (idwarehouse, libwarehouse)
AS
(SELECT '0001', 'Warehouse Est' FROM DUAL
UNION ALL
SELECT '0002', 'Warehouse West' FROM DUAL
UNION ALL
SELECT '0003', 'Warehouse South' FROM DUAL)
SELECT a.idarticle, w.idwarehouse, NVL (s.qtystock, 0) AS stock
FROM article a
CROSS JOIN warehouse w
LEFT JOIN stock s ON (a.idarticle = s.idarticle AND w.idwarehouse = s.idwarehouse)
ORDER BY a.idarticle, w.idwarehouse;
IDARTICLE IDWAREHOUSE STOCK
____________ ______________ ________
890001 0001 50
890001 0002 30
890001 0003 0
890002 0001 0
890002 0002 0
890002 0003 20
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/398200.html
