1054 Unknown column 'table1.id' in 'on clause'

Ошибка 1054 MySQL Unknown column 'table1.id' in 'on clause' может произойти при написании, казалось бы, правильного запроса:

SQL запрос 1
SELECT table1.content, table2.content1, table3.content3
FROM table1, table2
LEFT JOIN table3 ON table3.id_table1 = table1.id
WHERE table1.id = 20 AND table2.id_table1 = table1.id

Переписав запрос так, чтобы table2 тоже присоединялась с помощью LEFT JOIN, ошибка 1054 "уходит":

SQL запрос 2
SELECT table1.content, table2.content1, table3.content3
FROM table1
LEFT JOIN table2 ON table2.id_table1 = table1.id
LEFT JOIN table3 ON table3.id_table1 = table1.id
WHERE table1.id = 20

Второй SQL запрос практически аналогичен первому, за исключением того, что данные из table1 будут получены в не зависимости от того, есть ли необходимый id в table2, что не всегда приемлимо.

Побороть ошибку MySQL 1054 Unknown column 'table1.id' in 'on clause' возможно и без изменения логики запроса, просто заменив запятую во второй строке первого запроса (FROM table1, table2) на оператор JOIN: FROM table1 JOIN table2. В итоге, запрос к MySQL будет выглядеть так:

SQL запрос 3
SELECT table1.content, table2.content1, table3.content3
FROM table1 JOIN table2
LEFT JOIN table3 ON table3.id_table1 = table1.id
WHERE table1.id = 20 AND table2.id_table1 = table1.id

Ошибка Unknown column 'table1.id' in 'on clause' № 1054 после первого запроса возникала из-за того, что оператор запятая (а это именно оператор, аналогичный оператору JOIN), имеет меньший приоритет чем JOIN и LEFT JOIN. Из-за этого, к моменту запроса table1.id, данные table1 еще не были доступны: table2 уже прочитана, table1 еще нет.

Зная про приоритеты и причину возникновения ошибки 1054 Unknown column 'table1.id' in 'on clause', легко можно написать рабочий SQL запрос с оператором-запятой, просто заменив порядок подключения таблиц в FROM (c table1, table2 на table2, table1):

SQL запрос 4
SELECT table1.content, table2.content1, table3.content3
FROM table2, table1
LEFT JOIN table3 ON table3.id_table1 = table1.id
WHERE table1.id = 20 AND table2.id_table1 = table1.id
Опубликовано: 2011/06/07
HTML-код ссылки на эту страницу:
<a href="https://petrenco.com/mysql.php?txt=52" target="_blank">Ошибка MySQL: Unknown column 'table1.id' in 'on clause' 1054</a>
20267
Комментарии
Спасибо, помогло
Спасибо!
Добавить комментарий
Ваш e-mail: (не виден посетителям сайта)
Ваше имя:
Комментарий:
Символы с картинки:
Только выделенные поля формы добавления комментариев обязательны к заполнению.