Jeg vil gætte på Puzzles
har ikke en kolonne PuzzleID
. Kaldes kolonnen blot ID
i den tabel? Eller Puzzle_ID
?
Du bør køre SHOW CREATE TABLE Puzzles
for at se den aktuelle definition af denne tabel.
Nogle gange kan et manglende citat være synderen:
... ON `Puzzles.PuzzleID` ...
Ovenstående ville lede efter en kolonne, der bogstaveligt talt hedder "Puzzles.PuzzleID
," dvs. et kolonnenavn på 16 tegn med en prik i midten.
@Bell fortjener prisen for at bemærke, at du blander joins i komma-stil og SQL-92-stil joins. Det lagde jeg ikke mærke til!
Du bør ikke bruge begge i den samme forespørgsel, fordi forrangen af join-operationer sandsynligvis forårsager forvirringen.
JOIN
søgeord har højere forrang. For at forenkle din forespørgsel, så vi kan se på tabeludtrykkene, vil den blive evalueret som følger:
SELECT . . .
FROM (Puzzles JOIN PuzzleCategories),
(Clients JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages)
Problemet er, at joinforbindelsen til PuzzleUsages
skal sammenlignes med Puzzles.PuzzleID
kolonne, men på grund af spørgsmålet om forrang kan den ikke. Kolonnen er ikke en del af operanderne af den sidste JOIN
.
Du kan bruge parenteser til at løse fejlen, eksplicit tilsidesætte forrangen af tabeludtryk (ligesom du ville bruge parenteser i aritmetiske udtryk):
SELECT . . .
FROM Puzzles JOIN (PuzzleCategories, Clients)
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages
Eller du kan bare bruge SQL-92 JOIN
syntaks konsekvent. Jeg er enig med @Bell i, at dette er mere klart.
SELECT . . .
FROM Puzzles JOIN PuzzleCategories JOIN Clients
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages