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 JOIN (ваш - ANSI-89). Хотя они выполняют то же самое, синтаксис ANSI-89 не поддерживает соединения OUTER (RIGHT, LEFT, FULL). Синтаксис ANSI-89 следует считать устаревшим, на SO есть много людей, которые не будут голосовать за синтаксис 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 a.id, b.id, name, section
FROM tbl_names as a
LEFT JOIN tbl_section as b ON a.id = b.id;
Это можно сделать, указав полное имя, например:
SELECT tbl_names.id as id, name, section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id
Который дал бы вам идентификатор tbl_names
Самое простое решение - это соединение с 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
То, что вы, вероятно, действительно хотите здесь сделать, это использовать оператор объединения следующим образом:
(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
Если формат идентификаторов в этих двух таблицах отличается, то вы хотите присоединиться к ним, поэтому вы можете выбрать использование идентификатора из одной главной таблицы, например, если у вас есть table_customes
а также table_orders
и идентификатор для заказов такой же, как "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