Myślę, że Puzzles
nie ma kolumny PuzzleID
. Czy kolumna nazywa się po prostu ID
? w tym stole? Lub Puzzle_ID
?
Powinieneś uruchomić SHOW CREATE TABLE Puzzles
aby zobaczyć aktualną definicję tej tabeli.
Czasami przyczyną może być brak cytatu:
... ON `Puzzles.PuzzleID` ...
Powyższe szukałoby kolumny o nazwie dosłownie „Puzzles.PuzzleID
”, czyli nazwa kolumny o długości 16 znaków z kropką pośrodku.
@Bell zasługuje na nagrodę za zauważenie, że mieszasz sprzężenia w stylu przecinków i sprzężenia w stylu SQL-92. Nie zauważyłem tego!
Nie powinieneś używać obu w tym samym zapytaniu, ponieważ pierwszeństwo operacji łączenia prawdopodobnie powoduje zamieszanie.
JOIN
słowo kluczowe ma wyższy priorytet. Upraszczając zapytanie, abyśmy mogli przyjrzeć się wyrażeniom tabelowym, byłoby to oceniane w następujący sposób:
SELECT . . .
FROM (Puzzles JOIN PuzzleCategories),
(Clients JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages)
Problem polega na tym, że dołączenie do PuzzleUsages
musi porównać z Puzzles.PuzzleID
kolumny, ale ze względu na kwestię pierwszeństwa nie może. Kolumna nie jest częścią operandów ostatniego JOIN
.
Możesz użyć nawiasów do rozwiązania błędu, jawnie nadpisując pierwszeństwo wyrażeń tabelowych (tak jak używa się nawiasów w wyrażeniach arytmetycznych):
SELECT . . .
FROM Puzzles JOIN (PuzzleCategories, Clients)
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages
Lub możesz po prostu użyć SQL-92 JOIN
składnia konsekwentnie. Zgadzam się z @Bell, że jest to bardziej jasne.
SELECT . . .
FROM Puzzles JOIN PuzzleCategories JOIN Clients
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages