1052: столбец "id" в списке полей неоднозначен
у меня есть 2 таблицы. tbl_names
и tbl_section
что есть id
поле в них. Как мне выбрать id
поле, потому что я всегда получаю эту ошибку:
1052: Column 'id' in field list is ambiguous
вот мой запрос:
SELECT id, name, section
FROM tbl_names, tbl_section
WHERE tbl_names.id = tbl_section.id
я мог бы просто выбрать все поля и избежать ошибки. Но это было бы пустой тратой времени. Что же мне делать?
8 ответов:
SQL поддерживает квалификацию столбца путем префикса ссылки с полным именем таблицы:
SELECT tbl_names.id, tbl_section.id, name, section FROM tbl_names JOIN tbl_section ON tbl_section.id = tbl_names.id
...или псевдоним таблицы:
SELECT n.id, s.id, n.name, s.section FROM tbl_names n JOIN tbl_section s ON s.id = n.id
псевдоним таблицы является рекомендуемым подходом -- зачем вводить больше, чем нужно?
Почему Эти Запросы Выглядят По-Разному?
во-вторых, мои ответы используют синтаксис соединения ANSI-92 (ваш-ANSI-89). Хотя они выполняют то же самое, синтаксис ANSI-89 не поддерживает внешние соединения (RIGHT, LEFT, FULL). ANSI-89 синтаксис следует считать устаревшим, есть много тех, кто не будет голосовать за синтаксис ANSI-89, чтобы укрепить это. Ибо дополнительную информацию см. В этом вопросе.
в своем
SELECT
заявление вам нужно предварить свой идентификатор таблицей, из которой вы хотите его выбрать.SELECT tbl_names.id, name, section FROM tbl_names INNER JOIN tbl_section ON tbl_names.id = tbl_section.id
или
SELECT tbl_section.id, name, section FROM tbl_names INNER JOIN tbl_section ON tbl_names.id = tbl_section.id
вы бы сделали это, предоставив полное имя, например:
SELECT tbl_names.id as id, name, section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id
что даст вам идентификатор tbl_names
то, что вы, вероятно, действительно хотите сделать здесь, это использовать оператор union следующим образом:
(select ID from Logo where AccountID = 1 and Rendered = 'True') union (select ID from Design where AccountID = 1 and Rendered = 'True') order by ID limit 0, 51
вот документы для него https://dev.mysql.com/doc/refman/5.0/en/union.html
уже есть много ответов на ваш вопрос, Вы можете сделать это также. Вы можете дать своей таблице псевдоним и использовать его в запросе select следующим образом:
SELECT a.id, b.id, name, section FROM tbl_names as a LEFT JOIN tbl_section as b ON a.id = b.id;
самое простое решение-это соединение с
USING
вместоON
. Таким образом, база данных "знает", что обаid
столбцы на самом деле то же самое, и не будет придираться к этому:SELECT id, name, section FROM tbl_names JOIN tbl_section USING (id)
если
id
- это единственное общее имя столбца вtbl_names
иtbl_section
, вы даже можете использоватьNATURAL JOIN
:SELECT id, name, section FROM tbl_names NATURAL JOIN tbl_section
Смотрите также:https://dev.mysql.com/doc/refman/5.7/en/join.html
Если формат идентификаторов в двух таблицах варьируется, то вы хотите присоединиться к ним, поэтому вы можете использовать идентификатор из одной основной таблицы, скажем, если у вас есть
table_customes
иtable_orders
, и Tha id для заказов, как "101","102"..."110", просто используйте один для клиентовselect customers.id, name, amount, date from customers.orders;