MySQL“On 子句中的未知列”[重复]

Posted

技术标签:

【中文标题】MySQL“On 子句中的未知列”[重复]【英文标题】:MySQL "Unknown Column in On Clause" [duplicate] 【发布时间】: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

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

【问题讨论】:

您将“延迟连接”与“显式连接”语法混合在一起的任何原因? 【参考方案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 表中不存在。还是拼写错误??

【讨论】:

以上是关于MySQL“On 子句中的未知列”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

#1054 - “on 子句”中的未知列

“java.sql.SQLSyntaxErrorException:'on 子句'中的未知列'*'”在休眠条件下加入表时

未找到列:1054“on 子句”中的未知列“comments.commenter_id”

MySQL 5 左连接未知列

我的内部连接不起作用 未知列

GROUP_CONCAT 不适用于左连接