oracle 有break,被sqlplus的break命令搞糊涂了

你没有看到你的想法。您只需查询可能有重复项的部门和职位列,因为每个职位中可以有多名员工。中断设置的nodup部分意味着不会显示这两列的重复项;这意味着你看到混合的行,两列都被删除为重复列,以及被跳过的行。

我有一个不同的表,但效果相同:

break on department_id skip 1 on job_id skip 2

select department_id, job_id

from employees

where rownum < 10;

DEPARTMENT_ID JOB_ID

------------- ----------

90 AD_PRES

AD_VP

60 IT_PROG

100 FI_MGR

9 rows selected.

如果我添加另一个非空列和/或rownum伪列,您可以看到实际发生的事情:

ROWNUM DEPARTMENT_ID JOB_ID EMPLOYEE_ID

---------- ------------- ---------- -----------

1 90 AD_PRES 100

2 AD_VP 101

3 102

4 60 IT_PROG 103

5 104

6 105

7 106

8 107

9 100 FI_MGR 108

9 rows selected.

现在,如果部门内的工作发生变化,您可以看到它跳过两行,当部门更改时,可以看到三行。这就是你要求它做的。

您可能不想,但您也可以获得不同的值:

select distinct department_id, job_id ...

DEPARTMENT_ID JOB_ID

90 AD_VP

AD_PRES

60 IT_PROG

100 FI_MGR

选择了4行。

...再次,您会在部门内的工作和部门之间看到两条跳过的线。

您可能也会混淆文档中的行为描述;你说&#34;当它发现休息时#34;但它可以在结果中找到一行的多个中断;您链接到的文档实际上说:

SQL * Plus在输出的每一行中搜索指定的中断,从最外面的中断开始,然后按照输入子句的顺序继续 - 到最里面。

使用您的查询,它将匹配部门,工作或两者。

接下来,SQL * Plus执行从为最里面的中断指定的操作开始的操作,并以相反的顺序向最外面的中断继续... SQL * Plus执行每个操作,包括为第一个中断遇到的操作。最初的搜索。

你的案件中最重要的休息是工作,最重要的部门。如果部门没有改变但是工作没有改变,那么它只能在工作中找到匹配的中断,并且只应用最里面的跳过(两行)。如果部门改变了 - 无论工作是否也发生了变化 - 它会找到匹配,但仍然会以相反的顺序应用部门以后的所有on条款;所以它将应用来自作业的skip 1和来自部门的skip 2;因此总共跳过三行。

是的我在没有订单的情况下使用rownum,它恰好可以更好地处理这个查询和我的数据;不要在家里试试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值