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?
vog
22.5k11 gold badges57 silver badges73 bronze badges
asked Jul 10, 2011 at 1:08
Wern AnchetaWern Ancheta
21.9k38 gold badges98 silver badges138 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.
answered Jul 10, 2011 at 1:31
OMG PoniesOMG Ponies
321k79 gold badges517 silver badges499 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
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
halfdanhalfdan
33.1k8 gold badges78 silver badges86 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
M.JM.J
2,6544 gold badges23 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
vogvog
22.5k11 gold badges57 silver badges73 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 LegendBryan Legend
6,7221 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;
answered Mar 23, 2014 at 6:16
SELECT tbl_names.id, tbl_names.name, tbl_names.section
FROM tbl_names, tbl_section
WHERE tbl_names.id = tbl_section.id
answered May 22, 2017 at 13:47
nikunjnikunj
231 silver badge8 bronze badges
Содержание
- ORA-00918 (или #1052 в MySQL): частые ошибки новичков
- Форум пользователей MySQL
- #1 03.10.2017 14:05:06
- ERROR 1052 (23000): Column ‘num’ in field list is ambiguous
- Error 1052 Column in where clause is ambiguous
- Correcting the ‘1052 Column in where clause is ambiguous’ error
- The Error
- What causes the error
- Fixing the error
- Error 1052 Column in where clause is ambiguous
- Correcting the ‘1052 Column in where clause is ambiguous’ error
- The Error
- What causes the error
- Fixing the error
ORA-00918 (или #1052 в MySQL): частые ошибки новичков
В этом посту вы узнаете, что значит ошибка «ORA-00918: column ambiguously defined» и как её решить. Ошибка возникает, когда при объединении в двух таблицах присутствуют колонки с одинаковым названием и непонятно, к какой таблице относится колонка.
Для воспроизведения ошибки, создаём две простых таблицы с одинаковыми колонками — цифровой и текстовой. И number_column, и text_column присутствуют в обоих таблицах.
Выпоняем запрос SQL с объединением через JOIN, выбираем значения number_column, text_column из таблиц test_table1 и test_table2, в которых number_column из одной равняется number_column из другой, и number_column равняется единице.
Уже прочитав предложение сразу становится понятным, что невозможно определить к какой из двух таблиц относится number_column, а также text_column, что менее очевидно. После выполнения запроса Apex SQL Workshop (или любой другой инструмент для работы с базами данных Oracle) выдаёт такую ошибку:
Скриншот 1: Ошибка ORA-00918: column ambiguously defined
Исправить ситуацию можно двумя методами. В первом просто прописывает название таблицы перед названием колонки.
Второй метод удобнее. В нём используются алиасы названий таблиц, в нашем примере t1 для test_table1 и t2 для test_table2.
Кстати, в MySQL эта ошибка называется «#1052 — Column ‘number_column’ in field list is ambiguous» и лечится тем же способом. phpMyAdmin выдаёт при такой ошибке следующее сообщение:
Скриншот 2: Ошибка MySQL #1052 — Column in field list is ambiguous
Источник
Форум пользователей MySQL
Задавайте вопросы, мы ответим
Страниц: 1
#1 03.10.2017 14:05:06
ERROR 1052 (23000): Column ‘num’ in field list is ambiguous
Это учебная база
Вот скрипт для ее создания
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;
Задача такая
Составьте запрос, который будет получать из таблицы платежей номер, величину платежа, дату и имя получателя, для тех платежей, у которых величина больше средней величины платежа в базе в четыре и более раза.
Написал так и получил ошибку
В таблицах payments , receivers — есть поля с одинаковыми названиями num.
Как же в этом запросе указать, что надо искать.
Но все равно ошибка.
Поясниет пожайлуста как исправить ?
Источник
Error 1052 Column in where clause is ambiguous
2 Minutes, 9 Seconds to Read
When working with programs that pull data from databases, you may occasionally run across different types of errors. Many of them are fixable, specifically if you are coding your own SQL queries. This article describes the ‘1052 Column in where clause is ambiguous‘ error and how to correct it.
Correcting the ‘1052 Column in where clause is ambiguous’ error
The Error
This type of error occurs when a SQL query is working with more than one table. Our example below is using two tables within an ecommerce program and generates the following error:
What causes the error
The query gives each table an alias, the oc_customer table gets an alias of c and the oc_address table gets an alias of a. This is used to define which table the column is supposed to come from, such as the section of the query c.customer_id = a.customer_id. This is the same as saying oc_customer.customer_id = oc_address.customer_id. There is another section that has column names but the script fails to identify which table to look into, CONCAT(firstname, ‘ ‘, lastname). Since both the oc_customer and oc_address tables have columns named firstname and lastname, the server does not know which table to work with, and thus throws the error.
Fixing the error
To fix this, simply add the tablename or alias for the table you want to work with. If you are writing the query yourself, this is a bit easier to deal with as you will know which table you meant to use. In our example, we should add the alias for the oc_customer table, c, to the column names. Our code snippet would look like this: CONCAT(c.firstname, ‘ ‘, c.lastname) making the whole query appear as below.
If you are working with a developer or a professional level program (open source or purchased) you will need to let them know of the error. They will be able to fix the issue in their next release.
The query will now run correctly as it knows which table to work with on all columns.
Источник
Error 1052 Column in where clause is ambiguous
2 Minutes, 9 Seconds to Read
When working with programs that pull data from databases, you may occasionally run across different types of errors. Many of them are fixable, specifically if you are coding your own SQL queries. This article describes the ‘1052 Column in where clause is ambiguous‘ error and how to correct it.
Correcting the ‘1052 Column in where clause is ambiguous’ error
The Error
This type of error occurs when a SQL query is working with more than one table. Our example below is using two tables within an ecommerce program and generates the following error:
What causes the error
The query gives each table an alias, the oc_customer table gets an alias of c and the oc_address table gets an alias of a. This is used to define which table the column is supposed to come from, such as the section of the query c.customer_id = a.customer_id. This is the same as saying oc_customer.customer_id = oc_address.customer_id. There is another section that has column names but the script fails to identify which table to look into, CONCAT(firstname, ‘ ‘, lastname). Since both the oc_customer and oc_address tables have columns named firstname and lastname, the server does not know which table to work with, and thus throws the error.
Fixing the error
To fix this, simply add the tablename or alias for the table you want to work with. If you are writing the query yourself, this is a bit easier to deal with as you will know which table you meant to use. In our example, we should add the alias for the oc_customer table, c, to the column names. Our code snippet would look like this: CONCAT(c.firstname, ‘ ‘, c.lastname) making the whole query appear as below.
If you are working with a developer or a professional level program (open source or purchased) you will need to let them know of the error. They will be able to fix the issue in their next release.
The query will now run correctly as it knows which table to work with on all columns.
Источник
В этом посту вы узнаете, что значит ошибка «ORA-00918: column ambiguously defined» и как её решить. Ошибка возникает, когда при объединении в двух таблицах присутствуют колонки с одинаковым названием и непонятно, к какой таблице относится колонка.
Для воспроизведения ошибки, создаём две простых таблицы с одинаковыми колонками — цифровой и текстовой. И number_column, и text_column присутствуют в обоих таблицах.
CREATE TABLE test_table1(number_column NUMBER, text_column VARCHAR2(50) )
CREATE TABLE test_table2(number_column NUMBER, text_column VARCHAR2(50) )
Выпоняем запрос SQL с объединением через JOIN, выбираем значения number_column, text_column из таблиц test_table1 и test_table2, в которых number_column из одной равняется number_column из другой, и number_column равняется единице.
SELECT number_column, text_column FROM test_table1 JOIN test_table2 ON number_column = number_column WHERE number_column = 1
Уже прочитав предложение сразу становится понятным, что невозможно определить к какой из двух таблиц относится number_column, а также text_column, что менее очевидно. После выполнения запроса Apex SQL Workshop (или любой другой инструмент для работы с базами данных Oracle) выдаёт такую ошибку:
Скриншот 1: Ошибка ORA-00918: column ambiguously defined
Исправить ситуацию можно двумя методами. В первом просто прописывает название таблицы перед названием колонки.
SELECT test_table1.number_column, test_table1.text_column FROM test_table1 JOIN test_table2 ON test_table1.number_column = test_table2.number_column WHERE test_table1.number_column = 1
Второй метод удобнее. В нём используются алиасы названий таблиц, в нашем примере t1 для test_table1 и t2 для test_table2.
SELECT t1.number_column, t1.text_column FROM test_table1 t1 JOIN test_table2 t2 ON t1.number_column = t2.number_column WHERE t1.number_column = 1
Кстати, в MySQL эта ошибка называется «#1052 — Column ‘number_column’ in field list is ambiguous» и лечится тем же способом. phpMyAdmin выдаёт при такой ошибке следующее сообщение:
Скриншот 2: Ошибка MySQL #1052 — Column in field list is ambiguous
Понравился пост? Поделись в соцсетях и подписывайся на аккаунты в Twitter и Facebook!
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
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.
allonemoon 4 / 4 / 1 Регистрация: 31.10.2015 Сообщений: 247 |
||||
1 |
||||
21.08.2017, 14:37. Показов 32564. Ответов 2 Метки запрос (Все метки)
Вроде все верно ведь пишу?
#1052 — Column ‘id’ in field list is ambiguous
__________________
0 |
Модератор 4192 / 3031 / 577 Регистрация: 21.01.2011 Сообщений: 13,109 |
|
21.08.2017, 14:43 |
2 |
#1052 — Column ‘id’ in field list is ambiguous Сообщение говорит о том, что колонка id есть более чем в одной упомянутой таблице.
0 |
Павел86 11 / 11 / 2 Регистрация: 30.08.2017 Сообщений: 40 |
||||
30.08.2017, 23:53 |
3 |
|||
По идее, к названию колонки нужно добавить название таблицы. Например:
0 |
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.
Как же в этом запросе указать, что надо искать.
Select num.payments ……
Но все равно ошибка.
Поясниет пожайлуста как исправить ?
When working with programs that pull data from databases, you may occasionally run across different types of errors. Many of them are fixable, specifically if you are coding your own SQL queries. This article describes the ‘1052 Column in where clause is ambiguous‘ error and how to correct it.
The Error
This type of error occurs when a SQL query is working with more than one table. Our example below is using two tables within an ecommerce program and generates the following error:
Notice: Error: Column ‘firstname’ in where clause is ambiguous
Error No: 1052
SELECT COUNT(*) AS total FROM oc_customer c LEFT JOIN oc_address a ON (c.customer_id = a.customer_id) WHERE CONCAT(firstname, ‘ ‘, lastname) LIKE ‘%john%’
What causes the error
The query gives each table an alias, the oc_customer table gets an alias of c and the oc_address table gets an alias of a. This is used to define which table the column is supposed to come from, such as the section of the query c.customer_id = a.customer_id. This is the same as saying oc_customer.customer_id = oc_address.customer_id. There is another section that has column names but the script fails to identify which table to look into, CONCAT(firstname, ‘ ‘, lastname). Since both the oc_customer and oc_address tables have columns named firstname and lastname, the server does not know which table to work with, and thus throws the error.
Fixing the error
To fix this, simply add the tablename or alias for the table you want to work with. If you are writing the query yourself, this is a bit easier to deal with as you will know which table you meant to use. In our example, we should add the alias for the oc_customer table, c, to the column names. Our code snippet would look like this: CONCAT(c.firstname, ‘ ‘, c.lastname) making the whole query appear as below.
SELECT COUNT(*) AS total FROM oc_customer c LEFT JOIN oc_address a ON (c.customer_id = a.customer_id) WHERE CONCAT(c.firstname, ‘ ‘, c.lastname) LIKE ‘%john%’
If you are working with a developer or a professional level program (open source or purchased) you will need to let them know of the error. They will be able to fix the issue in their next release.
The query will now run correctly as it knows which table to work with on all columns.
Error ‘1052’ Field is ambiguous. I understand the error that is happening, and I’ve looked at several places for the fix and then applied the inner join function in attempt to fix it. It’s still not working, and it gives me the same error.
EventNo is a primary key in the eventrequest table and a foreign key in the Eventplan table. I’m trying to list the event number, event date, and count of the event plans while only including event requests in the result if the event request has more than one related event plan with a work date in December 2013. This is my code.
SELECT EventNo, DateAuth, COUNT(PlanNo)
FROM eventplan INNER JOIN eventrequest ON eventplan.eventNo = Eventrequest.EventNo
WHERE COUNT(PlanNo) > 1 BETWEEN '2013-12-01' AND '2013-12-31';
asked Feb 21, 2016 at 20:23
4
Qualify each column in the SELECT
/WHERE
and join clauses.
So, for example I’ve qualified the EventNo
column so that it’s read from the eventplan
table in the SELECT
clause — it’s ambiguous because it is in both the eventplan
and eventrequest
tables.
SELECT eventplan.EventNo, DateAuth, COUNT(PlanNo)
FROM eventplan INNER JOIN eventrequest ON eventplan.eventNo = Eventrequest.EventNo
WHERE COUNT(PlanNo) > 1 BETWEEN '2013-12-01' AND '2013-12-31';
You may nave to do the same for DateAuth
and PlanNo
if they exist in both tables (in this specific query).
It’s good practice to always fully qualify column names — can make the query easier to read. You can always use a table alias too to cut down on typing.
answered Feb 21, 2016 at 21:38
PhilᵀᴹPhilᵀᴹ
31.3k9 gold badges80 silver badges107 bronze badges
3