我有三个表item
,store
和stock_movement
。库存变动包含字段id
,item_id
,store_id
和quantity
。我想创建一个视图,显示每个商店中每个商品的数量总和。如果商店中的商品没有stock_movement
条目,则数量应为零。
我提出了以下问题:
SELECT item.*, store.id, SUM(s.quantity) AS quantity
FROM item, store
LEFT JOIN stock_movement s ON s.item_id = item.id AND store.id = s.store_id
GROUP BY store.id, item.id;
我收到以下错误:
错误代码:1054'on clause'
中的未知列'item.id'
如果我将查询切换为使用FROM store, item
,则未知列会发生变化:
错误代码:1054'on clause'
中的未知列'store.id'
This answer to use INNER JOIN
对我不起作用,因为有些项目和商店没有相应的stock_movement
条目,结果是缺少几行。
那么有没有办法进行交叉连接?
答案 0 :(得分:2)
您需要明确定义cross join
:
select i.id, s.id, coalesce(sum(si.quantity),0) quantity
from store s
cross join item i
left join storeitem si on s.id = si.storeid and i.id = si.itemid
group by i.id, s.id
顺便说一句,通过这种方式,您正在创建一个笛卡儿产品 - 所有商店都拥有所有商品。