LEFT JOIN和之间有什么区别LEFT OUTER JOIN?
使用CROSS APPLY的主要目的是什么?
我已经阅读(模糊地,通过互联网上的帖子),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)
)
GO
create 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)
) …Run Code Online (Sandbox Code Playgroud) 主表
x------x--------------------x
| Id | Name |
x------x--------------------x
| 1 | A |
| 2 | B |
| 3 | C |
x------x--------------------x
Run Code Online (Sandbox Code Playgroud)
详情表
x------x--------------------x-------x
| Id | PERIOD | QTY |
x------x--------------------x-------x
| 1 | 2014-01-13 | 10 |
| 1 | 2014-01-11 | 15 |
| 1 | 2014-01-12 | 20 |
| 2 | 2014-01-06 | 30 |
| 2 | 2014-01-08 | 40 |
x------x--------------------x-------x
Run Code Online (Sandbox Code Playgroud)
我LEFT JOIN和OUTER APPLY使用时得到相同的结果.
LEFT JOIN
SELECT …Run Code Online (Sandbox Code Playgroud) 我有一个历史表来捕获某个对象的更新,除了其他信息之外,还会捕获此更新发生的时间.我想这样做是SELECT在MIN(LogDate)对应于某一ActionTaken列.
更具体地说,历史表可能有其他(更近期)行ActionTaken = 1,但我想捕获日期ActionTaken 变为 1.
例:
SELECT MIN(LogDate) AS FirstActionDate
FROM HistoryTable
WHERE ID = 123
AND FirstActionTaken = 1
SELECT MIN(LogDate) AS SecondActionDate
FROM HistoryTable
WHERE ID = 123
AND SecondActionTaken = 1
SELECT MIN(LogDate) AS ThirdActionDate
FROM HistoryTable
WHERE ID = 123
AND ThirdActionTaken = 1
Run Code Online (Sandbox Code Playgroud)
这很好用,我收到了正确的日期没有问题.当我遇到麻烦,然后要select对MAX(LogDate)从该组:
SELECT MAX(LogDate) AS LastActionDate
FROM HistoryTable
WHERE ID = 123
AND LogDate IN
(
( SELECT MIN(LogDate) …Run Code Online (Sandbox Code Playgroud) sql-server ×4
left-join ×2
sql ×2
t-sql ×2
cross-apply ×1
outer-apply ×1
outer-join ×1
performance ×1