【问题标题】:#1054 - Unknown column in 'on clause' join#1054 - “on 子句”连接中的未知列
【发布时间】:2014-06-20 18:30:21
【问题描述】:

我遇到了这个错误:

1054 - “on 子句”中的未知列“t0.DESTINATION_ID”

运行此查询时:

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

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

【问题讨论】:

  • 'on 子句'中没有 t0.DESTINATION_ID'。你确定你的查询是正确的?
  • 能否给我们看看DESCRIBE的执行结果VIV_VIVIENNEITEM
  • 混合连接语法类型不利于阅读...
  • 您的查询中没有“t0.DESTINATION_ID”。至少我看不到。

标签: mysql join


【解决方案1】:

这是一个记录在案的问题,当您在 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 等等。如果您将逗号连接与 当存在连接条件时,其他连接类型的错误 可能会出现“on 子句”中的“未知列”“col_name”。信息 关于如何处理这个问题在本节后面给出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2022-01-14
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    相关资源
    最近更新 更多