Puzzles
だと思います PuzzleID
列がありません 。単にID
と呼ばれる列ですか そのテーブルで?またはPuzzle_ID
?
SHOW CREATE TABLE Puzzles
を実行する必要があります そのテーブルの現在の定義を確認します。
引用が欠落していることが原因である場合があります:
... ON `Puzzles.PuzzleID` ...
上記は文字通り「Puzzles.PuzzleID
」という名前の列を探します 、"つまり、16文字の長さの列名で、中央にドットがあります。
@Bellは、コンマスタイルの結合と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