In field list is ambiguous ошибка

I have 2 tables. tbl_names and tbl_section which has both the id field in them. How do I go about selecting the id field, because I always get this error:

1052: Column 'id' in field list is ambiguous

Here’s my query:

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

I could just select all the fields and avoid the error. But that would be a waste in performance. What should I do?

Shadow's user avatar

Shadow

33.6k10 gold badges51 silver badges64 bronze badges

asked Jul 10, 2011 at 1:08

Wern Ancheta's user avatar

Wern AnchetaWern Ancheta

22.4k38 gold badges100 silver badges139 bronze badges

SQL supports qualifying a column by prefixing the reference with either the full table name:

SELECT tbl_names.id, tbl_section.id, name, section
  FROM tbl_names
  JOIN tbl_section ON tbl_section.id = tbl_names.id 

…or a table alias:

SELECT n.id, s.id, n.name, s.section
  FROM tbl_names n
  JOIN tbl_section s ON s.id = n.id 

The table alias is the recommended approach — why type more than you have to?

Why Do These Queries Look Different?

Secondly, my answers use ANSI-92 JOIN syntax (yours is ANSI-89). While they perform the same, ANSI-89 syntax does not support OUTER joins (RIGHT, LEFT, FULL). ANSI-89 syntax should be considered deprecated, there are many on SO who will not vote for ANSI-89 syntax to reinforce that. For more information, see this question.

Community's user avatar

answered Jul 10, 2011 at 1:31

OMG Ponies's user avatar

OMG PoniesOMG Ponies

326k82 gold badges523 silver badges502 bronze badges

1

In your SELECT statement you need to preface your id with the table you want to choose it from.

SELECT tbl_names.id, name, section 
FROM tbl_names
INNER JOIN tbl_section 
   ON tbl_names.id = tbl_section.id

OR

SELECT tbl_section.id, name, section 
FROM tbl_names
INNER JOIN tbl_section 
   ON tbl_names.id = tbl_section.id

answered Jul 10, 2011 at 1:11

Taryn's user avatar

2

You would do that by providing a fully qualified name, e.g.:

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

Which would give you the id of tbl_names

answered Jul 10, 2011 at 1:12

halfdan's user avatar

halfdanhalfdan

33.6k8 gold badges78 silver badges87 bronze badges

2

Already there are lots of answers to your question, You can do it like this also. You can give your table an alias name and use that in the select query like this:

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

answered May 25, 2016 at 6:28

Mukesh Joshi's user avatar

Mukesh JoshiMukesh Joshi

2,7944 gold badges24 silver badges34 bronze badges

The simplest solution is a join with USING instead of ON. That way, the database «knows» that both id columns are actually the same, and won’t nitpick on that:

SELECT id, name, section
  FROM tbl_names
  JOIN tbl_section USING (id)

If id is the only common column name in tbl_names and tbl_section, you can even use a NATURAL JOIN:

SELECT id, name, section
  FROM tbl_names
  NATURAL JOIN tbl_section

See also: https://dev.mysql.com/doc/refman/5.7/en/join.html

answered Jun 15, 2018 at 20:21

vog's user avatar

vogvog

23.5k11 gold badges60 silver badges76 bronze badges

What you are probably really wanting to do here is use the union operator like this:

(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

Here’s the docs for it https://dev.mysql.com/doc/refman/5.0/en/union.html

answered May 28, 2015 at 20:34

Bryan Legend's user avatar

Bryan LegendBryan Legend

6,7901 gold badge59 silver badges60 bronze badges

0

If the format of the id’s in the two table varies then you want to join them, as such you can select to use an id from one-main table, say if you have table_customes and table_orders, and tha id for orders is like «101«,»102«…»110«, just use one for customers

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

Afzaal Ahmad Zeeshan's user avatar

answered Mar 23, 2014 at 6:16

Festole's user avatar

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

Vojtech Ruzicka's user avatar

answered May 22, 2017 at 13:47

nikunj's user avatar

nikunjnikunj

331 silver badge9 bronze badges

While working with tables in SQL and trying to fetch some data, you might have come across the Column ‘user_id‘ in field list is ambiguous” error. In this post, we will take a closer look at the reason behind the error followed by its solution.

What is Column ‘user_id’ in field list is ambiguous” error?  

This error occurs when you are trying to fetch some data from multiple tables with the help of a join query. But if the same field name is present in both tables, and you are not passing the table name as part of the column identifier, the query will be unsuccessful.

Look at the example given below:

SQL Query

SELECT user_id, name, age, user_address, user_sex FROM user_details as ud, users as u WHERE user_id = user_id LIMIT 0, 25

Error

#1052 - Column 'user_id' in field list is ambiguous

Column User Id Error

In the above example, we are trying to fetch data from two tables, users and user_details by using table join.   

users

user_details

user_id

user_details_id

name

user_id

age

user_address

user_sex

And you can see, the name of one field user_id is present in both the tables.

In the SELECT query, you are not specifying table name to select data. So, MySQL gets confused and generates the Column ‘user_id‘ in field list is an ambiguous error.

Solution

SELECT u.user_id, u.name, u.age, ud.user_address, ud.user_sex FROM user_details as ud, users as u WHERE u.user_id = ud.user_id

In this solution, you can see that the table name is specified using dot (.). Aliases u is for users table and ud is for user_details table. So, MySQL does not get confused after encountering u.user_id and ud.user_id. The query is executed successfully. 

Ошибка: в списке полей неоднозначность

На чтение 4 мин Опубликовано Обновлено

В процессе работы с SQL-запросами, программисты иногда сталкиваются с ошибкой «In field list is ambiguous», которая может вызвать некорректное выполнение синтаксиса запроса и привести к непредсказуемым результатам. Причина возникновения этой ошибки заключается в неоднозначном определении поля в запросе.

К такой ситуации может привести использование нескольких таблиц или подзапросов с одинаковыми именами полей. В таком случае СУБД не может определить, какое именно поле необходимо выбрать. Конфликт возникает при использовании названия поля, которое существует в двух или более таблицах, без указания конкретной таблицы.

Для решения данной ошибки можно воспользоваться несколькими способами. Первый способ — явно указать имя таблицы, к которой относится поле в запросе. Это позволит СУБД определить, какие поля необходимо выбрать и исключит неоднозначность.

Еще одним способом разрешения ошибки «In field list is ambiguous» является использование алиасов для таблиц. Алиас — это короткое имя, присваиваемое таблице или столбцу в запросе, которое позволяет использовать уникальные идентификаторы и избежать конфликтов в именах полей.

Ошибка «In field list is ambiguous» возникает в SQL при выполнении запроса, когда в выражении SELECT указано поле, которое является неоднозначным, то есть есть два или более источника данных с одинаковым именем поля.

Основные причины возникновения данной ошибки:

  1. Использование JOIN-операторов без указания таблицы или алиаса:
  2. Неверно Верно
    SELECT id FROM table1 JOIN table2 ON table1.id = table2.id SELECT table1.id FROM table1 JOIN table2 ON table1.id = table2.id
  3. Имя поля присутствует в нескольких таблицах без указания алиаса:
  4. Неверно Верно
    SELECT id FROM table1, table2 WHERE table1.id = table2.id SELECT table1.id FROM table1, table2 WHERE table1.id = table2.id
  5. Поле указано с использованием алиаса, который встречается в нескольких таблицах:
  6. Неверно Верно
    SELECT t1.id FROM table1 AS t1, table2 AS t2 WHERE t1.id = t2.id SELECT t1.id FROM table1 AS t1, table2 AS t2 WHERE t1.id = t2.table1_id

Чтобы исправить данную ошибку, нужно указать полное имя поля, включая имя таблицы или алиаса, или использовать алиасы для каждого поля.

Способы решения ошибки «In field list is ambiguous»

Ошибка «In field list is ambiguous» возникает при выполнении SQL-запроса, когда в списке полей указано неоднозначное поле. Это происходит, когда в запросе присутствуют таблицы с одинаковыми именами, и SQL-движок не может понять, из какой таблицы нужно выбрать поле.

Для исправления ошибки «In field list is ambiguous» можно использовать несколько способов:

  1. Явное указание таблицы: Если в запросе участвуют таблицы с одинаковыми именами, можно явно указать, из какой таблицы нужно выбрать поле. Например:
SELECT table1.column, table2.column FROM table1, table2 WHERE table1.id = table2.id;
  1. Использование псевдонимов: Псевдонимы позволяют задавать уникальные имена для таблиц или полей и использовать их в запросе. Например:
SELECT t1.column, t2.column FROM table1 AS t1, table2 AS t2 WHERE t1.id = t2.id;
  1. Указание полного имени таблицы: В случае, если таблица, из которой нужно выбрать поле, находится в другой базе данных или схеме, можно указать полное имя таблицы. Например:
SELECT database.table.column FROM database.table;
  1. Использование оператора JOIN: Оператор JOIN позволяет объединять таблицы по определенному условию. В таком случае, поля таблицы будут доступны через идентификаторы с указанием имени таблицы или псевдонима. Например:
SELECT t1.column, t2.column FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id;

Все перечисленные способы позволяют исправить ошибку «In field list is ambiguous» и выбрать нужное поле из конкретной таблицы, избегая неоднозначности.

This typically happens when you retrieve data from multiple tables with the same column name using a JOIN statement. You might receive an error like this:

ERROR: Column 'col_name' in field list is ambiguous

To avoid this error, you should define the table when inserting the column name in the SQL statement.

Example:

We have table departments and dept_emp with the same column name dept_no.

Now we try to join two tables using the dept_no column:

SELECT
  dept_no,
  dept_name
FROM
  departments
  INNER JOIN dept_emp
WHERE
  departments.dept_no = dept_emp.dept_no;

MySQL throws back the error message:

Query 1 ERROR: Column 'dept_no' in field list is ambiguous

To fix it, specify the tabledepartment for the column dept_no:

SELECT
  departments.dept_no,
  dept_name
FROM
  departments
  INNER JOIN dept_emp
WHERE
  departments.dept_no = dept_emp.dept_no;

Another case when you create a view:

CREATE VIEW order_view AS
SELECT
  customers.id,
  payment.id,
  total
FROM
  customers
  INNER JOIN orders
WHERE
  customers.id = orders.customer_id;

MySQL throws back the error message:

Query 1 ERROR: Duplicate column name 'dept_no'

A view also can’t have two columns of the same name. So to fix this, we can use alias:

CREATE VIEW order_view AS
SELECT
  customers.id,
  payment.id AS order_id,
  total
FROM
  customers
  INNER JOIN orders
WHERE
  customers.id = orders.customer_id;

Need a good GUI tool for databases? TablePlus provides a native client that allows you to access and manage Oracle, MySQL, SQL Server, PostgreSQL, and many other databases simultaneously using an intuitive and powerful graphical interface.

Download TablePlus for Mac.

Not on Mac? Download TablePlus for Windows.

On Linux? Download TablePlus for Linux

Need a quick edit on the go? Download TablePlus for iOS

TablePlus in Dark mode

create database sale;     # создание базы данных — продажи
use sale;                 # указываем базу данных , для добавления в нее данных и изменения

# создаем таблицу платежей
/*первое поле `num` — это порядковый номер платежа, оно должно быть уникальным, не должно быть пустым;
   `2`-е поле paydate — дата продажи, не должна быть пустой, обязательна к заполению,
по умолчанию подставляется текущая дата и время, которое берется из системных значений
компьютера, на котором работает данная база данных;
поле receiver — получатель платежа, не должно иметь пустого значения;
поле amount — здесь вводится сумма платежа, поле не должно быть пустым, оно имеет в сумме
`10` разрядов,из них:
`2`-разряда после запятой,
`8`-разрядов цифр перед запятой разрядов»*/

create table payments(num  INT not null,
                      paydate datetime not null default current_timestamp,
                      receiver int not null,
                      amount decimal(10,2) not null,
                      primary key(num),
                      unique(num) );  
# смотрим описание таблицы
desc payments;

# наполняем таблицу

insert into payments (num,paydate,receiver,amount)
               values(1,‘2016-10-30 15:00:00’,1,35000.5),
                     (2,‘2017-11-30 15:25:00’,2,25000.5),
                     (3,‘2015-11-30 10:25:00’,2,15000.5),
                     (4,‘2014-11-30 11:25:00’,3,10000.5),
                     (5,‘2014-11-30 11:25:00’,3,10000.5);

# используем, при заполнении таблицы, значение по умолчанию для поля paydate
# поэтому это поле и значения для него опустим из параметров

insert into payments (num,receiver,amount)
               values(6,4,1000.5),
                     (7,2,500.5),
                     (8,3,17000.5),
                     (9,1,100.5),
                     (10,4,15000.5),
                     (11,4,35000.5),
                     (12,2,45000.5),
                     (13,3,55000.5),
                     (14,4,85000.5),
                     (15,4,85000.5),
                     (16,4,85000.5);

# производим выборку всех данных из таблицы payments
select * from payments;

# создаем таблицу получателей
/*первое поле num — это порядковый номер получателя, оно должно быть уникальным, не должно быть пустым;
  `name` — так как это слово зарезервировано, обозначим его обратными кавычками,
обозначим максимальный размер хранимой строки, Указание правильного размера поля таблицы,
может значительно сэкономить занимаемую ею память.
`VARCHAR` — это тип данных — строковые данные переменной длины,сделаем данное поле индексируемым и уникальным
и назначим данному полю первичный ключ;

 
*/

create table receivers( num INT not null,
                       `name` Varchar(255) not null,
                       PRIMARY KEY(`name`), INDEX (`name`), UNIQUE (name));

# смотрим описание таблицы
desc receivers;

 
# наполняем таблицу receivers

     insert into receivers (num,`name`)
               values(1,‘ВЭБ’),
                     (2,‘АБСОЛЮТ’),
                     (3,‘ФОНД СОРЕСА’),
                     (4,‘ВАЛЮТНЫЙ РЕЗЕРВНЫЙ ФОНД’);
   # производим выборку всех данных из таблицы receivers
select * from receivers;  

           
# Создаем таблицу клиентов
create table clients (num INT,FamilyN Varchar(255),    FirstN Varchar(255), FatherN Varchar(255),
                      PRIMARY KEY(`num`), INDEX (`num`), UNIQUE (num));

# смотрим описание таблицы
desc clients;

# наполняем таблицу clients

 insert into clients (num, familyn,firstn,fathern)
       values(1,‘Петровский’,‘Павел’,‘Анатольевич’),
                (2,‘Семенова’,‘Алла’,‘Анатольевна’),
                (3,‘Пинчук’,‘Владислав’,‘Павлович’),
                (4,‘Сергеенко’,‘Павел’,‘Петрович’),
                (5,‘Савич’,‘Елена’,‘Александровна’),
                (6,‘Осипов’,‘Андрей’,‘Александрович’),
                (7,‘Мойсейчик’,‘Анна’,‘Антоновна’),
                (8,‘Александровский’,‘Сергей’,‘Викторович’),
                (9,‘Пушкин’,‘Александр’,‘Викторович’);

 # производим выборку всех данных из таблицы receivers
select * from clients;  

Составьте запрос, который будет получать из таблицы платежей номер, величину платежа, дату и имя получателя, для тех платежей, у которых величина больше средней величины платежа в базе в четыре и более раза.

mysql> select num as ‘номер платежа’, amount as ‘Величина платежа’, paydate as дата, name as ‘имя получателя’ from payments, receivers rs
    -> where receiver = rs.num and amount >= (select avg(amount) from payments)*4;
ERROR 1052 (23000): Column ‘num’ in field list is ambiguous

В таблицах payments , receivers  — есть поля с одинаковыми названиями   num.
Как же в этом запросе указать, что надо искать.

Но все равно ошибка.
  Поясниет пожайлуста как исправить ?

Понравилась статья? Поделить с друзьями:
  • Imvehft для gta san andreas ошибка
  • Imshow python ошибка
  • Ims service ошибка
  • Ims service остановлено как исправить ошибку
  • Impressa e80 ошибка 8