Неоднозначная ошибка имени столбца - PullRequest
0 голосов
/ 13 мая 2018

У меня проблема с командой выбора из 2 таблиц.

Итак, у меня есть table1 с:

table1_id = int pk;    
table1_name;   
table1_surname;   
table1_age;    
table1_address;   
table1_city;

А table2 с:

table2_id int pk   
table1_id int fk references table1.table1_id;   
table3_id;  
table2_description;

Когда я пишу следующую инструкцию выбора, я получаю неоднозначное имя столбца table1.table1_name error:

SELECT table2.table2_id, table2.table1_id, table1.table1_name, table2.table2_description
from table1,
     table2 inner join
     table1
     on table2.table1_id = table1.table1_id;

Честно говоря, я не понимаю, что в этом плохого?

Ответы [ 3 ]

0 голосов
/ 13 мая 2018

Если я правильно понял, у вас проблема в строке ниже

from table1, table2 

В приведенном выше коде вы используете CROSS JOIN между table2 и table1, что не требуется в вашем случае.

Измените ваш запрос следующим образом.

SELECT table2.table2_id, table2.table1_id, table1.table1_name, table2.table2_description 
from  table2 
 inner join table1 on table2.table1_id = table1.table1_id;
0 голосов
/ 13 мая 2018

Никогда не используйте запятые в предложении FROM. Всегда используйте правильный, явный синтаксис JOIN:

select t2.table2_id, t2.table1_id, t1.table1_name, t2.table2_description
from table1 t1 join
     table2 t2 
     on t2.table1_id = t1.table1_id;

Проблема вашего запроса в том, что у вас есть две ссылки на table1 из-за запятой.Вы упомянули стол дважды.Следовательно, когда вы ссылаетесь на колонку, движок не знает, на что вы ссылаетесь.Ваша версия эквивалентна:

from table1 cross join
     table2 join
     table1
     on table2.table1_id = table1.table1_id

table1 появляется дважды, поэтому любая ссылка на нее неоднозначна.

Вы заметите, что я также добавил псевдонимы таблиц в запрос.Псевдонимы таблиц облегчают написание и чтение запроса.

0 голосов
/ 13 мая 2018

Удалить table1, сразу после from (смешанный синтаксис старого типа "запятая" и современный тип соединения)

Использовать следующим образом:

SELECT t2.table2_id, t2.table1_id, t1.table1_name, t2.table2_description 
  FROM table2 t2 INNER JOIN table1 t1 ON ( t2.table1_id = t1.table1_id ) ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...