Как я могу решить неоднозначную ошибку имени столбца в 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