MySQL"On Clause中的未知列"

Con*_*eet 12 mysql sql join mysql-error-1054

我有以下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
Run Code Online (Sandbox Code Playgroud)

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

ERROR CODE:
SQL Error (1054): Unknown column 'posts.author' in 'on clause'
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

有没有人想过为什么会这样?谢谢你的帮助.

Hai*_*vgi 41

因为你的混合连接语法

From Mysql[文档]

但是,逗号运算符的优先级小于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);