cross apply ,好像也是用于内联接的啊。可是感觉没啥用。因为用join就可以直接代替了。请问大家是不是啊。如果不是,那又是为什么?
哎呀,当然替代不了啦。据一个简单的业务场景,比如有两个数据结果集1,和2,1结果集很小,2结果集很大。如果,让1和2在连接的时候,我只需要找到2中一个满足条件的纪录,就不用接着往下找,这一次连接循环退出。这种业务场景INNER JOIN很难实现,因为INNER JOIN必须要找到所有满足条件的纪录。例子如下:
use tempdb
GO
;WITH dataSet1
AS( SELECT * FROM (VALUES(0), (1), (2), (3), (4), (5), (6), (7), (8), (9)) AS T(C)
), dataSet2
as(
SELECT a = a.C, b = b.C, c = c.C, d = d.C
FROM dataSet1 as a, dataSet1 as b, dataSet1 as c, dataSet1 as d
)
SELECT A.C, B.a
FROM dataSet1 AS A
CROSS APPLY(
SELECT TOP 1 *
FROM dataSet2 AS B
WHERE B.a = A.C
) AS B
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。