Sql 将distinct关键字与join一起使用
我的教授给了我一个作业 编写一个将生成 所有销售人员的snum价值观 (抑制重复项)使用命令 在订单表中 销售人员 Snum编号(4)Sql 将distinct关键字与join一起使用,sql,oracle,Sql,Oracle,我的教授给了我一个作业 编写一个将生成 所有销售人员的snum价值观 (抑制重复项)使用命令 在订单表中 销售人员 Snum编号(4) Sname varchar2(10) 城市瓦查尔2(10) 通信号(3,2) 客户 Cnum编号(4) Cname varchar2(10) 城市瓦查尔2(10) 评级编号(4) Snum编号(4) 订单 Onum号码(4) 金额编号(7,2) 日期 Cnum编号(4) Snum编号(4) 我不确定我是否完全理解了这个问题 我已经使用join编写了查询 sele
Sname varchar2(10)
城市瓦查尔2(10)
通信号(3,2) 客户 Cnum编号(4)
Cname varchar2(10)
城市瓦查尔2(10)
评级编号(4)
Snum编号(4) 订单 Onum号码(4)
金额编号(7,2)
日期
Cnum编号(4)
Snum编号(4) 我不确定我是否完全理解了这个问题 我已经使用join编写了查询
select distinct s.snum,onum
from salespeople s, ordrs o
where s.snum = o.snum
order by snum;
输出是
SNUM ONUM
---------- ----------
1001 3003
1001 3008
1001 3011
1002 3005
1002 3007
1002 3010
1004 3002
1007 3001
1007 3006
但我不想让斯努姆重演。有人能给我指出一个正确的方向吗
谢谢。在您的查询中,请从SELECT中删除onum-
select distinct s.snum
from salespeople s, ordrs o
where s.snum = o.snum
order by snum;
这应该只显示不同的snum。,也可以通过子查询而不是联接轻松完成:
select s.snum
from salespeople s
where exists (
select 1
from ordrs
where snum = s.snum
);
这基本上是说:给我所有在ordrs表中至少有1条匹配记录的snum。问题要求您“编写一个查询,生成订单表中所有销售人员的snum值(抑制重复项)”,它没有指定您需要包括订单号。(这意味着您不需要订单号,因为通过包含它们,您将复制snum值。)
鉴于snum出现在Orders表中,从Orders表中选择snum值的不同列表应该相对简单。您只需要从1个表中选择:
select distinct o.snum
from ordrs o
order by o.snum;
注意:我遵守了order by条款,但严格来说,不需要回答给出的问题。以上两个答案似乎都是正确的,但似乎是正确的
select distinct snum
from ordrs
order by snum
或
会更有效率,因为我们不需要阅读销售人员。如果表ordrs中的snum上存在外键约束,则这是可以接受的
NB:我写这篇文章时,托尼刚刚回答了。我完全同意他的观点:)订单上有外键约束吗?
select snum
from ordrs
group by snum
order by snum