如何从MySQL中的多个表中选择所有记录,即使在某些表中没有匹配

4si2a6ki  于 2023-03-11  发布在  Mysql
关注(0)|答案(1)|浏览(111)

我有三个表(Stores,Item & StoreInv),我正在尝试进行一个包含Stores & Items中所有记录的连接,即使StoreInv中没有匹配的记录。
存储表:

StoreId
-------
Store1
Store2
Store3

项目表:

ItemId
-------
A
B
C

StoreInv表(仅包含商店中有库存的商品的记录):

ItemId    StoreId    Qty 
-------   -------    ---
A         Store1      6
B         Store1      2
B         Store2      4

预期输出:

StoreId    ItemId   Qty 
-------    ------   ---
Store1     A         6
Store2     A         0 (or null)
Store3     A         0 (or null)
Store1     B         2
Store2     B         4
Store3     B         0 (or null)
Store1     C         0 (or null)
Store2     C         0 (or null)
Store3     C         0 (or null)

我尝试过的:

SELECT str.StoreId, itm.ItemId, inv.Qty
FROM Item itm
LEFT JOIN StoreInv inv ON inv.ItemId = itm.ItemId
RIGHT JOIN Stores str on str.StoreId = inv.StoreId

结果(不是我想要的):

StoreId    ItemId   Qty 
-------    ------   ---
Store1     A         6
Store1     B         2
Store2     B         4
Store3     null      null
8dtrkrch

8dtrkrch1#

你应该CROSS JOINStoresInv表得到所有可能的组合,然后LEFT JOINStoreInv表得到每一个的数量。

SELECT str.StoreId, itm.ItemId, IFNULL(inv.Qty, 0) Qty
FROM Item itm
CROSS JOIN Stores str
LEFT JOIN StoreInv inv ON inv.ItemId = itm.ItemId AND inv.StoreID = str.StoreID

DEMO

相关问题