2016-05-15 65 views
-3

我下表工作:解釋下面的SQL

create table EmpDup(empid int,name varchar(20)) 

insert into EmpDup values(1,'Andy') 

insert into EmpDup values (1,'Andy') 

insert into EmpDup values(2,'Bill') 

insert into EmpDup values(2,'Bill') 

insert into EmpDup values (2,'Bill') 

insert into EmpDup values (3,'Chris') 

表改變插入行後添加標識列:

alter table EmpDup add sno int identity(1,1) 

可能有人請解釋一下下面的查詢是如何工作的?

select sno from EmpDup D where 

1<(select count(*) from EmpDup A where A.empid=D.empid and A.name=D.name and 

D.sno>=A.sno) 

我無法弄清楚。它給出以下結果:

SNO 2 4 5

+1

您希望輸出什麼,爲什麼? – hvd

+0

不是真的在期待任何輸出...只是不理解查詢的工作原理...不能將其翻譯成簡單的英語在我的頭... – Tejas

回答

-2

它返回該EMP具有多於一個的其它SNO整數(loyees)的SNO整數。

+0

不,它不。如果這就是它所做的,那麼這三個結果將會是'Bill'的三個'sno' ID。其中兩個是,但不是全部三個。 – hvd

+0

幾乎,它會返回其他行,但不是第一個,因爲'D.sno> = A.sno' –

0

運行此操作,您會看到sno = 2出現兩次,sno = 4出現兩次,sno = 5出現三次。 sno的其他值只出現一次,因此不符合計數條件。

select D.empid, D.sno from EmpDup D 
inner join EmpDup A on A.empid=D.empid and A.name=D.name and D.sno>=A.sno