解释以下SQL

时间:2016-05-15 18:35:39

标签: sql sql-server

我正在使用下表:

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

2 个答案:

答案 0 :(得分:0)

运行此选项,您将看到sno = 2出现两次,sno = 4出现两次,sno = 5出现3次。 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

答案 1 :(得分:-2)

它返回具有多个其他sno整数的emp(loyees)的sno整数。