Я думаю, Puzzles
не имеет столбца PuzzleID
. Столбец называется просто ID
в этой таблице? Или Puzzle_ID
?
Вы должны запустить SHOW CREATE TABLE Puzzles
, чтобы увидеть текущее определение этой таблицы.
Иногда виновной может быть пропущенная цитата:
... ON `Puzzles.PuzzleID` ...
Выше будет выглядеть столбец с буквальным названием "Puzzles.PuzzleID
", то есть имя столбца длиной 16 символов с точкой в середине.
@ Белл заслуживает награды за то, что заметил, что вы смешиваете соединения в стиле запятых и соединения в стиле SQL-92. Я этого не заметил!
Вы не должны использовать оба в одном запросе, потому что приоритет операций объединения, вероятно, вызывает путаницу.
Ключевое слово JOIN
имеет более высокий приоритет. Упростив ваш запрос, чтобы мы могли взглянуть на табличные выражения, он будет оцениваться следующим образом:
SELECT . . .
FROM (Puzzles JOIN PuzzleCategories),
(Clients JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages)
Проблема в том, что соединение с PuzzleUsages
должно сравниваться со столбцом Puzzles.PuzzleID
, но из-за проблемы приоритета не может. Столбец не является частью операндов последнего JOIN
.
Вы можете использовать круглые скобки для устранения ошибки, явно переопределяя приоритет табличных выражений (так же, как вы используете круглые скобки в арифметических выражениях):
SELECT . . .
FROM Puzzles JOIN (PuzzleCategories, Clients)
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages
Или вы можете просто использовать синтаксис SQL-92 JOIN
последовательно. Я согласен с @Bell, что это более понятно.
SELECT . . .
FROM Puzzles JOIN PuzzleCategories JOIN Clients
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages