Подтвердить что ты не робот

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

Я мог бы просто выбрать все поля и избежать ошибки. Но это будет пустой тратой времени. Что мне делать?

4b9b3361

Ответ 1

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 JOIN (ваш ANSI-89). В то время как они выполняют то же самое, синтаксис ANSI-89 не поддерживает соединения OUTER (RIGHT, LEFT, FULL). Синтаксис ANSI-89 следует считать устаревшим, многие из SO, которые не будут голосовать за синтаксис ANSI-89, чтобы усилить это. Для больше информации см. Этот вопрос.

Ответ 2

В вашем выражении 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

Ответ 3

Вы сделали бы это, предоставив полное имя, например:

SELECT tbl_names.id as id, name, section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id

Что даст вам идентификатор tbl_names

Ответ 4

Уже есть много ответов на ваш вопрос, вы можете сделать это так же. Вы можете присвоить своей таблице псевдоним и использовать его в запросе select, например:

SELECT a.id, b.id, name, section
FROM tbl_names as a 
LEFT JOIN tbl_section as b ON a.id = b.id;

Ответ 5

То, что вы, вероятно, действительно хотите сделать, это использовать оператор объединения следующим образом:

(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

Ответ 6

Если формат идентификатора в двух таблицах меняется, то вы хотите присоединиться к ним, поэтому вы можете выбрать использование идентификатора из одной основной таблицы, скажем, если у вас есть table_customes и table_orders, а tha id для заказов похож на " 101", " 102"... " 110", просто используйте его для клиентов

select customers.id, name, amount, date from customers.orders;

Ответ 7

SELECT tbl_names.id, tbl_names.name, tbl_names.section
  FROM tbl_names, tbl_section 
 WHERE tbl_names.id = tbl_section.id