2012-05-07 3 views
12

У меня есть следующая MySQL запросы: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

Любая причина, по которой вы смешиваете «ленивое соединение» с синтаксисом «явного соединения»? –

ответ

38

, потому что ваш микс присоединиться синтаксис

From Mysql[docs]

However, the precedence of the comma operator is less than of INNER JOIN, CROSS JOIN, LEFT JOIN, and so on. If you mix comma joins with the other join types when there is a join condition, an error of the form Unknown column 'col_name' in 'on clause' may occur. Information about dealing with this problem is given later in this section.

решение:

To allow the join to be processed, group the first two tables explicitly with parentheses so that the operands for the ON clause are (t1,t2) and t3:

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

Alternatively, avoid the use of the comma operator and use JOIN instead:

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

1

это, что с запятой у вас есть ON posts.author=users.id;

+0

К сожалению, это была опечатка. –

0

Предоставление псевдонима для таблиц в статье from и окружении g их с круглыми скобками заставит его работать. Но смешивание соединений по-прежнему является плохой практикой.

0

Он просто говорит, что автор не существует в почтовой таблице. либо орфографическая ошибка ??