Tôi đoán Puzzles
không có cột PuzzleID
. Cột có được gọi đơn giản là ID
không trong bảng đó? Hoặc Puzzle_ID
?
Bạn nên chạy SHOW CREATE TABLE Puzzles
để xem định nghĩa hiện tại của bảng đó.
Đôi khi, một câu trích dẫn bị thiếu có thể là thủ phạm:
... ON `Puzzles.PuzzleID` ...
Ở trên sẽ tìm kiếm một cột có tên theo nghĩa đen là "Puzzles.PuzzleID
, "nghĩa là tên cột dài 16 ký tự với dấu chấm ở giữa.
@Bell xứng đáng nhận được giải thưởng vì nhận thấy rằng bạn đang trộn các phép nối kiểu dấu phẩy và phép nối kiểu SQL-92. Tôi không nhận thấy điều đó!
Bạn không nên sử dụng cả hai trong cùng một truy vấn, vì thứ tự ưu tiên của các thao tác nối có thể gây ra sự nhầm lẫn.
JOIN
từ khóa có mức độ ưu tiên cao hơn. Đơn giản hóa truy vấn của bạn để chúng tôi có thể xem xét các biểu thức bảng, nó sẽ được đánh giá như sau:
SELECT . . .
FROM (Puzzles JOIN PuzzleCategories),
(Clients JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages)
Vấn đề là tham gia vào PuzzleUsages
cần so sánh với Puzzles.PuzzleID
nhưng vì vấn đề ưu tiên, nó không thể. Cột không phải là một phần của toán hạng của JOIN
cuối cùng .
Bạn có thể sử dụng dấu ngoặc đơn để giải quyết lỗi, ghi đè rõ ràng mức độ ưu tiên của biểu thức bảng (giống như cách bạn sử dụng dấu ngoặc đơn trong biểu thức số học):
SELECT . . .
FROM Puzzles JOIN (PuzzleCategories, Clients)
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages
Hoặc bạn chỉ có thể sử dụng SQL-92 JOIN
cú pháp nhất quán. Tôi đồng ý với @Bell rằng điều này rõ ràng hơn.
SELECT . . .
FROM Puzzles JOIN PuzzleCategories JOIN Clients
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages