sql >> Databasteknik >  >> RDS >> Mysql

Okänd kolumn {0} i on-sats

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


  1. MySQL-fel:Värde utanför intervallet för kolumn "belopp" på rad 1

  2. PHP Hur returnerar man datetime(6) från Mysql?

  3. Kan inte ansluta till den lokala MySQL-servern via sockeln '/var/run/mysqld/mysqld.sock' i Ubuntu 12.04.5 LTS

  4. Hur LOWER() fungerar i MariaDB