2015-10-10 2 views
0

Он работает, но я выбираю все столбцы. Может кто-нибудь объяснить мне, почему мой первый запрос не работает? Я не думаю, что мне нужно присоединиться. Если я получу какую-то помощь, это будет хорошо. Честно говоря, я никогда не видел ошибку раньше. Если он работает с SELECT *, я не понимаю, почему у меня возникают проблемы с выбором определенных столбцов.Попробуйте выбрать, но получить неоднозначную ошибку?

Это мои таблицы:

create table product 
(
pdt# varchar(10) not null, 
pdt_name varchar(30) not null, 
pdt_label varchar(30) not null, 
constraint product_pk primary key (pdt#)); 

create table orders 
(
pdt# varchar(10) not null, 
qty number(11,0) not null, 
city varchar(30) not null 
); 

И эти значения

insert into product values ([111,chair,chr]); 
insert into product values ([222,stool,stl]); 
insert into product values ([333,table,tbl]); 

insert into orders values ([111,22,Ottawa]); 
insert into orders values ([222,22,Ottawa]); 
insert into orders values ([333,22,Toronto]); 

Вопрос заключается в следующем:

  • гр. Перечислите все [ФДТ #, pdt_name, шт] когда заказ от [Оттава]

Я попытался:

SELECT pdt#, pdt_name, qty FROM orders, product WHERE city='Ottawa'; 

я получаю столбец неоднозначно определяется ошибка. Но когда я запускаю:

SELECT *, qty FROM orders, product WHERE city='Ottawa'; 

Выполняется, но я выбираю все столбцы. Может кто-нибудь объяснить мне, почему мой первый запрос не работает? Я не думаю, что мне нужно присоединиться. Если я получу какую-то помощь, это будет хорошо. Честно говоря, я никогда не видел ошибку раньше. Если он работает с SELECT *, я не понимаю, почему у меня возникают проблемы с выбором определенных столбцов.

+0

Вам необходимо присоединиться. –

+0

Правильный результат от @vkp, однако, в отношении того, почему запрос 1 не работает, потому что pdt # существует как в таблицах заказов, так и в продуктах. Вы можете исправить это, указав, в какой таблице вы хотите получить результат, например. orders.pdt #, pdt_name .. и т. д. –

ответ

0

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

Вы также должны join таблиц. Иначе вы получите результат cross-join.

SELECT p.pdt#, p.pdt_name, o.qty 
FROM orders o join product p on o.pdt# = p.pdt# 
WHERE o.city='Ottawa'; 

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

Смежные вопросы