Mysql
 sql >> база данни >  >> RDS >> Mysql

Неизвестна колона {0} в клауза on

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да ограничим търсенето и замяната на низ в mySQL

  2. Не може да се свърже с mysql база данни [strato]

  3. използване на auto_increment в съставен ключ

  4. Как да премахнете само непрекъснати дубликати, но не всички дубликати в заявка за избор (MySQL)?

  5. cross-dbms начин да проверите дали низът е числов