2012-05-07 7 views
12

Tôi đã truy vấn MySQL sau:MySQL "Unknown cột trong On khoản"

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 

nào, là bạn có thể thấy, kết nối ba bảng vv vv Dù sao, vấn đề là nó mang lại cho một lỗi:

ERROR CODE: 
SQL Error (1054): Unknown column 'posts.author' in 'on clause' 

mặc dù truy vấn này đơn giản được sử dụng trên một trang khác hoạt động:

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 

có ai có suy nghĩ là tại sao đây là OCC uring? Cảm ơn bạn đã giúp đỡ.

+1

Bất kỳ lý do nào bạn trộn 'tham gia lười biếng' với cú pháp 'tham gia rõ ràng'? –

Trả lời

38

vì sự pha trộn của bạn tham gia cú pháp

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.

giải pháp là:

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

là nó mà bán ruột bạn có ON posts.author=users.id;

+0

Xin lỗi, đó là lỗi đánh máy. –

0

Đưa ra một bí danh để bàn của bạn trong mệnh đề from và vùng lân cận g chúng với dấu ngoặc đơn sẽ làm cho nó hoạt động. Nhưng sự kết hợp trộn vẫn là một thực tế tồi.

0

Nó chỉ đơn giản nói rằng tác giả không tồn tại trong bảng bài. hoặc là lỗi chính tả ??