Как я могу решить неоднозначную ошибку имени столбца в MySQL?

Возможный дубликат:
1052: столбец id в списке полей неоднозначен

У меня есть две таблицы, и я хочу соединить таблицы sb_id (sb_id то же самое для двух таблиц). Итак, я использовал свой запрос так:

SELECT Name, 
       class 
  FROM student_info,
       student_class 
 WHERE id = 1 
   AND student_info.sb_id = student_class.sb_id;

И это показало ошибку:

1052: "id" в том, где предложение неоднозначно

Другое дело, я хочу показать только один результат, используя "JOIN".

10 ответов

Это означает, что обе таблицы имеют id и вам нужно поставить перед ним префикс таблицы, в которой он появляется (если он одинаков в обоих случаях, то подойдет любой).

SELECT
  name,
  class
FROM student_info, student_class
WHERE
  student_info.id=1
  AND student_info.sb_id=student_class.sb_id;

По вашему желанию будет возвращен единственный результат, если только одна запись с student_info.id=1 и student_class запись с соответствием sb_id, Результат такой же, как если бы вы использовали INNER JOIN - другими словами, обе записи должны существовать и объединяться.

Соответствующий INNER JOIN Синтаксис будет выглядеть так:

SELECT
  name,
  class,
FROM student_info
INNER JOIN student_class ON student_info.sb_id = student_class.sb_id
WHERE student_info.id = 1

Проблема с вашим WHERE Устав, нужно использовать:

where student_info.id=1

или же:

where student_class.id=1
SELECT Name,class 
FROM student_info,student_class 
WHERE student_info.sb_id=1 AND student_info.sb_id=student_class.sb_id;

Это означает, что столбец идентификатора присутствует в обеих таблицах, просто замените идентификатор на student_info.id или student_class.id, который когда-либо предназначен

SELECT Name,class from student_info join student_class on student_info.sb_id=student_class.sb_id where student_info.id=1;

ВЫБЕРИТЕ a.Name,a.class из student_info как объединение student_class как b на a.sb_id = b.sb_id, где id=1;

SELECT student_info.Name,student_info.class from student_info inner join student_class on student_info.sb_id=student_class.sb_id where student_info.id=1;

Если ваш where id=1 быть where student_info.sb_id = 1?

Вы можете изменить его на соединение следующим образом:

SELECT Name,class FROM student_info INNER JOIN student_class ON student_info.sb_id = student_class.sb_id WHERE student_info.sb_id=1

Добавьте префикс столбца ID в предложении where к имени таблицы. Это сбивает с толку, потому что идентификатор находится в обеих таблицах, и он не знает, какую вы имеете в виду.

WHERE student_info.id=1

или же

WHERE student_class.id=1

в зависимости от того, что вы имели в виду, когда вы написали запрос.

Это потому, что обе ваши таблицы имеют id поле, поэтому вам нужно указать, какие id вы хотите использовать (вы можете или не можете использовать псевдонимы таблиц, я предпочитаю использовать, но это действительно ваше дело). Кроме того, используя JOIN для объединения таблиц гораздо лучше, чем положить все в FROM, Я бы переписал ваш запрос

SELECT Name,class 
from student_info si
INNER JOIN student_class sc ON (sc.sb_id = si.sb_id)
WHERE si.id = 1  // or sc.id =1, whatever makes sense
Другие вопросы по тегам