交叉连接上的错误代码1054未知列

时间:2015-05-05 15:24:45

标签: mysql sql

我有三个表itemstorestock_movement。库存变动包含字段iditem_idstore_idquantity。我想创建一个视图,显示每个商店中每个商品的数量总和。如果商店中的商品没有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条目,结果是缺少几行。

那么有没有办法进行交叉连接?

1 个答案:

答案 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
顺便说一句,通过这种方式,您正在创建一个笛卡儿产品 - 所有商店都拥有所有商品。