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

Colonna sconosciuta {0} nella clausola on

Direi Puzzles non ha una colonna PuzzleID . La colonna è chiamata semplicemente ID in quel tavolo? Oppure Puzzle_ID ?

Dovresti eseguire SHOW CREATE TABLE Puzzles per vedere la definizione corrente di quella tabella.

A volte una citazione mancante può essere il colpevole:

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

Quanto sopra cercherebbe una colonna chiamata letteralmente "Puzzles.PuzzleID ," ovvero un nome di colonna lungo 16 caratteri con un punto al centro.

@Bell merita il premio per aver notato che stai mescolando join in stile virgola e join in stile SQL-92. non me ne ero accorto!

Non dovresti usarli entrambi nella stessa query, perché la precedenza delle operazioni di join sta probabilmente causando confusione.

Il JOIN la parola chiave ha una precedenza maggiore. Semplificando la tua query in modo da poter esaminare le espressioni della tabella, verrebbe valutata come segue:

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

Il problema è che il join a PuzzleUsages deve essere confrontato con Puzzles.PuzzleID colonna, ma a causa del problema della precedenza, non può. La colonna non fa parte degli operandi dell'ultimo JOIN .

Puoi usare le parentesi per risolvere l'errore, sovrascrivendo esplicitamente la precedenza delle espressioni di tabella (proprio come useresti le parentesi nelle espressioni aritmetiche):

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

Oppure puoi semplicemente usare SQL-92 JOIN sintassi in modo coerente. Sono d'accordo con @Bell sul fatto che questo sia più chiaro.

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