Jag skulle gissa Puzzles
har inte en kolumn PuzzleID
. Kallas kolumnen helt enkelt ID
i den tabellen? Eller Puzzle_ID
?
Du bör köra SHOW CREATE TABLE Puzzles
för att se den aktuella definitionen av den tabellen.
Ibland kan ett saknat citat vara boven:
... ON `Puzzles.PuzzleID` ...
Ovanstående skulle leta efter en kolumn som bokstavligen heter "Puzzles.PuzzleID
", det vill säga ett kolumnnamn på 16 tecken med en prick i mitten.
@Bell förtjänar priset för att ha märkt att du blandar kopplingar i kommastil och kopplingar i SQL-92-stil. Det märkte jag inte!
Du bör inte använda båda i samma fråga, eftersom prioriteten för join-operationer förmodligen orsakar förvirringen.
JOIN
sökord har högre prioritet. För att förenkla din fråga så att vi kan titta på tabelluttrycken, skulle den utvärderas enligt följande:
SELECT . . .
FROM (Puzzles JOIN PuzzleCategories),
(Clients JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages)
Problemet är att kopplingen till PuzzleUsages
måste jämföras med Puzzles.PuzzleID
kolumn, men på grund av prioritetsfrågan kan den inte. Kolumnen är inte en del av operanderna för den senaste JOIN
.
Du kan använda parenteser för att lösa felet och explicit åsidosätta tabelluttrycks företräde (precis som du skulle använda parenteser i aritmetiska uttryck):
SELECT . . .
FROM Puzzles JOIN (PuzzleCategories, Clients)
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages
Eller så kan du bara använda SQL-92 JOIN
syntax konsekvent. Jag håller med @Bell om att detta är tydligare.
SELECT . . .
FROM Puzzles JOIN PuzzleCategories JOIN Clients
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages