http://sqlfiddle.com/#!3/78273/1
create table emptb1
(
id int,
name varchar(20),
dept int
)
insert into emptb1 values (1,'vish',10);
insert into emptb1 values (2,'vish',10);
insert into emptb1 values (3,'vish',30);
insert into emptb1 values (4,'vish',20);
create table depttb1
(
id int,
name varchar(20)
)
insert into depttb1 values(10,'IT')
insert into depttb1 values(20,'AC')
insert into depttb1 values(30,'LIC')
select * from emptb1
select e.id, e.name, a.id
from emptb1 e
cross apply
(
select top 1 * from depttb1 d
where d.id = e.dept
order by d.id desc
) a
我试图学习交叉应用程序,因为它与内部连接类似,但使用函数工作。
在上面的查询中,我假设它只应该获取dept=30,因为order d.id desc将仅给出第一个id即30,然后它应返回dept id=30的员工,但它给我所有行和所有deptid。
查询有什么问题,或者我对交叉应用程序的概念理解错误。
emptbl
中有两行记录,其中(大概)具有相同的id
和name
?如果是这样,请再次查看您的查询 - 它在cross apply
期间未提及这些列 - 因此首先它会对deptid
为40的行执行操作,并且在depttbl
中唯一匹配的行是具有id
40的行。因此,这是来自emptbl
的第一行的顶部1匹配行。然后,我们对deptid
为50的行执行相同的过程。这一次,我们匹配了一个具有id
50的行,它再次是顶部1... - Damien_The_Unbeliever