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