让我们有两张桌子
create table A (
fkb int,
groupby int
);
create table B (
id int,
search int
);
insert into A values (1, 1);
insert into B values (1, 1);
insert into B values (2, 1);
然后是以下查询
select B.id, t.max_groupby - B.search diff
from B
cross apply (
select max(A.groupby) max_groupby
from A
where A.fkb = B.id
) t
返回预期结果如下
id diff
---------
1 0
2 NULL
但是,当我添加group by A.fkb
到交叉应用时,B
对应的行A.fkb
不存在,消失了。
select B.id, t.max_groupby - B.search diff
from B
cross apply (
select max(A.groupby) max_groupby
from A
where A.fkb = B.id
group by A.fkb
) t
我在 SQL Server 和 PostgreSQL 上进行测试(用cross join lateral
而不是cross apply
)。为什么group by
会使行消失?似乎cross apply
在第一种情况下表现为外连接,在后一种情况下表现为内连接。但是,我不清楚为什么。