【问题标题】:MySQL "Unknown Column in On Clause" [duplicate]MySQL“On 子句中的未知列”[重复]
【发布时间】:2012-05-16 00:57:35
【问题描述】:

我有以下 MySQL 查询:

SELECT posts.id,  posts.name,  LEFT(posts.content, 400),  posts.author,  posts.date, users.display_name,
  GROUP_CONCAT(tags.tag ORDER BY tag_linking.pid ASC SEPARATOR ",") update_tags
FROM posts, tag_linking, tags
INNER JOIN `users`
ON posts.author=users.id;
WHERE tag_linking.pid = posts.id 
  AND tags.id = tag_linking.tid 
ORDER BY posts.date DESC

你可以看到,连接三个表等等等等。无论如何,问题是它给出了一个错误:

ERROR CODE:
SQL Error (1054): Unknown column 'posts.author' in 'on clause'

即使在另一个页面上使用的这个更简单的查询有效:

SELECT posts.id,  posts.name,  LEFT(posts.content, 400),  posts.author,  posts.date, users.display_name FROM `posts`
INNER JOIN `users`
ON posts.author=users.id

有没有人想过为什么会发生这种情况?感谢您的帮助。

【问题讨论】:

  • 您将“延迟连接”与“显式连接”语法混合在一起的任何原因?

标签: mysql sql join mysql-error-1054


【解决方案1】:

因为你的混合连接语法

From Mysql[docs]

但是,逗号运算符的优先级低于 INNER JOIN、CROSS JOIN、LEFT JOIN 等等。 如果您将逗号连接与 当存在连接条件时,其他连接类型的错误 可能会出现“on 子句”中的“未知列”“col_name”。信息 关于如何处理这个问题在本节后面给出。

解决办法是:

要允许处理连接,请将前两个表分组 显式地用括号括起来,这样 ON 子句的操作数是 (t1,t2) 和 t3:

SELECT * FROM (t1, t2) JOIN t3 ON (t1.i1 = t3.i3);

或者,避免使用逗号操作符,使用JOIN 而是:

SELECT * FROM t1 JOIN t2 JOIN t3 ON (t1.i1 = t3.i3);

【讨论】:

    【解决方案2】:

    你的那个分号是ON posts.author=users.id;

    【讨论】:

      【解决方案3】:

      from 子句中为您的表提供别名并用括号括起来可以使其工作。但是混合连接仍然是一种不好的做法。

      【讨论】:

        【解决方案4】:

        它只是说作者在 post 表中不存在。还是拼写错误??

        【讨论】:

          猜你喜欢
          • 2011-05-03
          • 1970-01-01
          • 2014-03-13
          • 1970-01-01
          • 2016-06-19
          • 2018-05-12
          • 2011-03-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多