MySQL “Unknown Column in On Clause” [duplicate]

2019-06-24 05:59发布

这个问题已经在这里有一个答案:

  • 在ON子句MySQL的未知列 3回答

我有以下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

有没有人有想法,为什么这是发生? 谢谢你的帮助。

Answer 1:

因为你的组合连接语法

From Mysql [文档]

然而,逗号运算符的优先级小于INNER JOIN,CROSS JOIN,LEFT JOIN,等等。 如果混合使用逗号与其他连接连接类型时,有一个连接条件,形式未知列“COL_NAME”的错误“的条款”,可能会出现 。 关于处理这个问题的信息在本节后面给出。

解决的办法是:

以允许加入要被处理,组前两个带括号的明确的表,以便为ON子句的操作数是(T1,T2)和t3:

SELECT * FROM(T1,T2)JOIN t3的ON(t1.i1 = t3.i3);

另外 ,避免使用逗号运算符和使用JOIN代替:

SELECT * FROM T1 JOIN T2 T3 JOIN ON(t1.i1 = t3.i3);



Answer 2:

它是你有分号ON posts.author=users.id;



Answer 3:

给予一个别名到您的表中from条款,并用括号包围他们会使其工作。 但是,混合加入仍然是一个不好的做法。



Answer 4:

它只是说,笔者并不在交表的存在。 无论是拼写错误?



文章来源: MySQL “Unknown Column in On Clause” [duplicate]