sql >> Base de Datos >  >> RDS >> Mysql

Columna desconocida {0} en la cláusula on

Supongo que Puzzles no tiene una columna PuzzleID . ¿La columna se llama simplemente ID? en esa mesa? O Puzzle_ID ?

Debes ejecutar SHOW CREATE TABLE Puzzles para ver la definición actual de esa tabla.

A veces, una cita faltante puede ser la culpable:

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

Lo anterior buscaría una columna literalmente llamada "Puzzles.PuzzleID ," es decir, un nombre de columna de 16 caracteres con un punto en el medio.

@Bell merece el premio por notar que está mezclando uniones de estilo coma y uniones de estilo SQL-92. ¡No me di cuenta de eso!

No debe usar ambos en la misma consulta, porque la precedencia de las operaciones de combinación probablemente esté causando la confusión.

El JOIN palabra clave tiene mayor prioridad. Si simplificamos su consulta para que podamos ver las expresiones de la tabla, se evaluaría de la siguiente manera:

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

El problema es que se une a PuzzleUsages necesita compararse con Puzzles.PuzzleID columna, pero debido al problema de precedencia, no puede. La columna no forma parte de los operandos del último JOIN .

Puede usar paréntesis para resolver el error, anulando explícitamente la precedencia de las expresiones de tabla (al igual que usaría paréntesis en expresiones aritméticas):

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

O simplemente puede usar SQL-92 JOIN sintaxis consistentemente. Estoy de acuerdo con @Bell en que esto es más claro.

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