#1054 - ' on子句'中的未知列加入

时间:2014-06-20 10:06:57

标签: mysql join

我有这个错误:

  

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'))

我之前提交过类似的帖子,但我无法解决问题。有人可以帮我找出问题所在吗?

1 个答案:

答案 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'。信息   关于这个问题的处理将在本节后面给出。