15

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

有人对为什么会发生这种情况有想法吗?谢谢你的帮助。

4

4 回答 4

46

因为你的混合连接语法

From Mysql[文档]

但是,逗号运算符的优先级低于 INNER JOIN、CROSS JOIN、LEFT JOIN 等。如果在存在连接条件的情况下将逗号连接与其他连接类型混合使用,则可能会出现形式为 Unknown column 'col_name' in 'on Clause' 的错误。本节稍后将提供有关处理此问题的信息。

解决方案是:

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

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

或者,避免使用逗号运算符,而是使用 JOIN:

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

于 2012-05-07T14:04:42.480 回答
1

你有那个半结肠吗ON posts.author=users.id;

于 2012-05-07T14:02:33.207 回答
0

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

于 2012-05-07T14:14:57.563 回答
0

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

于 2012-05-07T14:08:31.850 回答