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 只会给出前 1st id,即 30,然后它应该返回 dept id = 30 的员工,但它给了我所有的行和所有的部门。
查询有什么问题,或者我错误地解释了交叉应用的概念。