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

ご覧のとおり、3つのテーブルを接続するなどです。とにかく、問題はエラーが発生することです。

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、LEFTJOINなどよりも低くなります。結合条件があるときに他の結合タイプとコンマ結合を混在させると、「on句」の「不明な列」の形式のエラーが発生する可能性があります。この問題への対処に関する情報は、このセクションの後半に記載されています。

解決策は次のとおりです。

結合を処理できるようにするには、最初の2つのテーブルを括弧で明示的にグループ化して、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);

于 2012-05-07T14:04:42.480 に答える
1

あなたが持っているのはそのセミコロンですかON posts.author=users.id;

于 2012-05-07T14:02:33.207 に答える
0

Giving an alias to your tables in from clause and surrounding them with parentheses would make it work. But mixing joins is still a bad practice.

于 2012-05-07T14:08:31.850 に答える
0

それは単に著者が投稿テーブルに存在しないことを示しています。スペルミス?

于 2012-05-07T14:14:57.563 に答える