Предполагам, че 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