为了账号安全,请及时绑定邮箱和手机立即绑定

什么时候应该在内部连接上使用交叉应用?

什么时候应该在内部连接上使用交叉应用?

犯罪嫌疑人X 2019-06-27 15:57:58
什么时候应该在内部连接上使用交叉应用?使用的主要目的是什么?交叉应用?我(隐约地,通过互联网上的帖子)读到cross apply如果要进行分区,则在对大型数据集进行选择时,效率可能更高。(想到寻呼)我也知道CROSS APPLY 不需要将udf作为正确的表。在大多数INNER JOIN查询(一对多的关系),我可以重写它们以使用CROSS APPLY但他们总是给我同等的执行计划。谁能给我举个很好的例子CROSS APPLY在那些情况下INNER JOIN也会起作用吗?编辑:下面是一个简单的例子,其中的执行计划是完全相同的。(给我看看它们的不同之处cross apply更快/更有效率)create table Company (     companyId int identity(1,1),   companyName varchar(100),   zipcode varchar(10) ,   constraint PK_Company primary key (companyId))GOcreate table Person (     personId int identity(1,1),   personName varchar(100),   companyId int,   constraint FK_Person_CompanyId foreign key (companyId) references dbo.Company(companyId),   constraint PK_Person primary key (personId))GOinsert Companyselect 'ABC Company', '19808' unionselect 'XYZ Company', '08534' unionselect '123 Company', '10016'insert Personselect 'Alan', 1 unionselect 'Bobby', 1 unionselect 'Chris', 1 unionselect 'Xavier', 2 unionselect 'Yoshi', 2 unionselect 'Zambrano', 2 unionselect 'Player 1', 3 unionselect 'Player 2', 3 unionselect 'Player 3', 3 /* using CROSS APPLY */select *from Person pcross apply (     select *     from Company c    where p.companyid = c.companyId) Czip/* the equivalent query using INNER JOIN */select *from Person pinner join Company c on p.companyid = c.companyId
查看完整描述

3 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

cross apply有时能让你做一些你不能做的事。inner join.

示例(语法错误):

select F.* from sys.objects O  
inner join dbo.myTableFun(O.name) F   
on F.schema_id= O.schema_id

这是一个语法错误,因为,当与inner join,表函数只能接受变量或常数作为参数。(也就是说,表函数参数不能依赖于另一个表的列。)

然而:

select F.* from sys.objects O  
cross apply ( select * from dbo.myTableFun(O.name) ) F  
where F.schema_id= O.schema_id

这是合法的。

编辑:或者更短的语法:(由ErikE编写)

select F.* from sys.objects O  
cross apply dbo.myTableFun(O.name) Fwhere F.schema_id= O.schema_id

编辑:

注意:Informix 12.10 xC2+拥有横向导出表和PostgreSQL(9.3+)横向子查询也可以起到类似的效果。


查看完整回答
反对 回复 2019-06-27
  • 3 回答
  • 0 关注
  • 570 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信