我有这个错误:
1054 - 未知栏' t0.DESTINATION_ID'在' on条款'
运行此查询时:
SELECT t0.ID,
t0.DESTINATION_ID,
t0.PRODUCT_ID,
t0.ITEM_ID,
t4.NAME,
t4.CURRENTVALUE
FROM ITEM t3,
ITEM t2,
PORTABLESENSOR t1,
VIV_VIVIENNEITEM t0,
PROD_PRODUCT_PROPERTY t5
INNER JOIN PROPERTY AS t4
ON (t4.ID = t5.properties_ID)
WHERE ((((t1.ISSUED = 1)
AND (t2.ID = t3.ID))
AND (t0.PRODUCT_ID IN (2961)))
AND (((t2.ID = t0.ITEM_ID)
AND (t2.DTYPE = 'Item'))
AND ((t3.ID = t1.ITEM_ID)
AND (t3.DTYPE = 'Item'))))
AND (NAME = 'ColoreFornitore'
OR (NAME = 'Modello')
OR (NAME = 'DescrizioneColorefornitore'))
我之前提交过类似的帖子,但我无法解决问题。有人可以帮我找出问题所在吗?
答案 0 :(得分:3)
这是在MySQL中将隐式连接语法与显式连接语法混合时出现的文档问题。简单规则:从不在多个表的from
子句中使用逗号。
您可以将逗号替换为cross join
:
FROM ITEM t3 cross join
ITEM t2 cross join
PORTABLESENSOR t1 cross join
VIV_VIVIENNEITEM t0 cross join
PROD_PRODUCT_PROPERTY t5
INNER JOIN PROPERTY AS t4
ON (t4.ID = t5.properties_ID)
最好使用join
并将条件放在where
子句中的on
子句中。
此问题的文档为here:
INNER [CROSS] JOIN和(逗号)在语义上等效于 没有连接条件:两者之间产生笛卡尔积 指定的表(即第一个表中的每一行) 连接到第二个表中的每一行。)
但是,逗号运算符的优先级小于INNER JOIN,CROSS JOIN,LEFT JOIN等等。如果你混合使用逗号连接 当有连接条件时,其他连接类型,错误 form可能会出现'on子句'中的未知列'col_name'。信息 关于这个问题的处理将在本节后面给出。