Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将distinct关键字与join一起使用_Sql_Oracle - Fatal编程技术网

Sql 将distinct关键字与join一起使用

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

我的教授给了我一个作业

编写一个将生成 所有销售人员的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编写了查询

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