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 62

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;
SELECT tbl_names.id, tbl_names.name, tbl_names.section
  FROM tbl_names, tbl_section 
 WHERE tbl_names.id = tbl_section.id