【问题标题】:Error Code 1054 unknown column on cross join交叉连接上的错误代码 1054 未知列
【发布时间】:2015-05-05 15:24:44
【问题描述】:

我有三个表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 Unknown column 'item.id' in 'on Clause'

如果我将查询切换为使用FROM store, item,未知列会发生变化:

错误代码:1054 Unknown column 'store.id' in 'on Clause'

This answer to use INNER JOIN 对我不起作用,因为有些商品和商店没有对应的 stock_movement 条目,即结果缺少几行。

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

【问题讨论】:

  • 您已经在FROM 子句中使用逗号分隔的表列表混合了隐式内连接和显式左连接。可能您所需要的只是介于stock_movementstore 之间的LEFT JOIN,但是您能否发布每个表中的一小部分行样本以及您期望查询输出的样本?
  • 您是否尝试过为 item 和 store 表设置别名?
  • @Zoldren 是的。同样的错误。
  • 错误是因为同时使用了隐式连接和显式连接,使用显式连接的ON子句中的隐式连接表。
  • @MichaelBerkowski 使用显式连接有效。请添加一个进一步描述此问题的答案。特别是隐式与显式交叉连接,因为我似乎无法在网上找到合适的解释

标签: mysql sql


【解决方案1】:

您需要明确定义您的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

顺便说一句——通过这种方式,您正在创建一个笛卡尔积——所有商店都有所有商品。

【讨论】:

  • 完美。不知道为什么隐式失败。
猜你喜欢
  • 2011-11-12
  • 2015-08-19
  • 1970-01-01
  • 2016-02-09
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
相关资源
最近更新 更多