Mysql
 sql >> Base de données >  >> RDS >> Mysql

Colonne inconnue {0} dans la clause on

Je suppose que Puzzles n'a pas de colonne PuzzleID . La colonne s'appelle-t-elle simplement ID dans ce tableau ? Ou Puzzle_ID ?

Vous devez exécuter SHOW CREATE TABLE Puzzles pour voir la définition actuelle de cette table.

Parfois, une citation manquante peut être le coupable :

... ON `Puzzles.PuzzleID` ...

Ce qui précède rechercherait une colonne littéralement nommée "Puzzles.PuzzleID ," c'est-à-dire un nom de colonne de 16 caractères avec un point au milieu.

@Bell mérite le prix pour avoir remarqué que vous mélangez des jointures de style virgule et des jointures de style SQL-92. je n'avais pas remarqué ça !

Vous ne devez pas utiliser les deux dans la même requête, car la priorité des opérations de jointure est probablement à l'origine de la confusion.

Le JOIN mot-clé a une priorité plus élevée. En simplifiant votre requête afin que nous puissions examiner les expressions de table, elle serait évaluée comme suit :

SELECT . . . 
FROM (Puzzles JOIN PuzzleCategories),
(Clients JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages)

Le problème est que la jointure à PuzzleUsages doit être comparé au Puzzles.PuzzleID colonne, mais en raison du problème de priorité, il ne peut pas. La colonne ne fait pas partie des opérandes du dernier JOIN .

Vous pouvez utiliser des parenthèses pour résoudre l'erreur, en remplaçant explicitement la priorité des expressions de table (tout comme vous utiliseriez des parenthèses dans des expressions arithmétiques) :

SELECT . . . 
FROM Puzzles JOIN (PuzzleCategories, Clients)
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages

Ou vous pouvez simplement utiliser SQL-92 JOIN syntaxe cohérente. Je suis d'accord avec @Bell que c'est plus clair.

SELECT . . . 
FROM Puzzles JOIN PuzzleCategories JOIN Clients
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages