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