sql >> Database teknologi >  >> RDS >> Mysql

Ukendt kolonne {0} i on-klausul

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


  1. MySQL får mindate og maxdate i én forespørgsel

  2. PERIOD_DIFF() Eksempler – MySQL

  3. Problem med heredoc og PHP

  4. mysql-forespørgsel for at få optælling efter gruppe og samlet antal