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 子句中的未知列”[重复]的主要内容,如果未能解决你的问题,请参考以下文章
“java.sql.SQLSyntaxErrorException:'on 子句'中的未知列'*'”在休眠条件下加入表时