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