Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Coluna desconhecida {0} na cláusula on


Acho que Puzzles não tem uma coluna PuzzleID . A coluna é chamada simplesmente de ID nessa mesa? Ou Puzzle_ID ?

Você deve executar SHOW CREATE TABLE Puzzles para ver a definição atual dessa tabela.

Às vezes, uma citação ausente pode ser a culpada:
... ON `Puzzles.PuzzleID` ...

O acima procuraria uma coluna literalmente chamada "Puzzles.PuzzleID ," ou seja, um nome de coluna de 16 caracteres com um ponto no meio.

@Bell merece o prêmio por perceber que você está misturando junções no estilo vírgula e junções no estilo SQL-92. Eu não notei isso!

Você não deve usar ambos na mesma consulta, porque a precedência das operações de junção provavelmente está causando a confusão.

O JOIN palavra-chave tem maior precedência. Simplificando sua consulta para que possamos ver as expressões da tabela, ela seria avaliada da seguinte forma:
SELECT . . . 
FROM (Puzzles JOIN PuzzleCategories),
(Clients JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages)

O problema é que a junção a PuzzleUsages precisa comparar com o Puzzles.PuzzleID coluna, mas por causa do problema de precedência, não pode. A coluna não faz parte dos operandos do último JOIN .

Você pode usar parênteses para resolver o erro, substituindo explicitamente a precedência de expressões de tabela (assim como você usaria parênteses em expressões aritméticas):
SELECT . . . 
FROM Puzzles JOIN (PuzzleCategories, Clients)
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages

Ou você pode simplesmente usar SQL-92 JOIN sintaxe de forma consistente. Eu concordo com @Bell que isso é mais claro.
SELECT . . . 
FROM Puzzles JOIN PuzzleCategories JOIN Clients
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages