它运行但我选择了所有列。有人可以向我解释为什么我的第一个查询不起作用吗?我不认为我需要加入。如果我能得到一些好的帮助。说实话,我以前从未见过这个错误。如果它适用于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]);
问题是:
我试过了:
SELECT pdt#, pdt_name, qty FROM orders, product WHERE city='Ottawa';
我得到的列是模糊定义的错误。但是当我跑步时:
SELECT *, qty FROM orders, product WHERE city='Ottawa';
它运行但我选择了所有列。有人可以向我解释为什么我的第一个查询不起作用吗?我不认为我需要加入。如果我能得到一些好的帮助。说实话,我以前从未见过这个错误。如果它适用于SELECT *,我不明白为什么我遇到选择特定列的问题。
答案 0 :(得分: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';
您的第二个查询有效,因为您正在从两个表中选择所有列,理想情况下不应该这样做。从多个表中选择时,请始终指定所需的列。