如何优化这个子查询(不使用 Select inside Where 子句)?

问题描述 投票:0回答:1

我正在尝试查看是否有优化底层 T-SQL 代码的方法。

以前的同事是这样写的,我不确定是否有更好的写法,因为它在 Where 子句(子查询?)中有 Select...。

select 
Employee_Number,    
DateLoad 
from dbo.table1 as a
where DateLoad = 
(select min(DateLoad) from dbo.table2 as b 
   where a.Employee_Number = b.Employee_Number)
tsql subquery query-optimization
1个回答
0
投票

这仍然使用嵌套的 SELECT,但不在 WHERE 子句中并且应该运行得更快:

SELECT Employee_Number, DateLoad
FROM (
    select a.Employee_number, a.DateLoad
       , row_number() over (partition by a.Employee_Number
                            order by b.DateLoad) rn
    from Table1 A
    inner join Table2 B on B.Employee_Number = A.Employee_Number 
        and a.DateLoad = b.DateLoad
) t
WHERE rn = 1

根据数据的不同,可能还有一种方法可以使用 GROUP BY 来做到这一点,而无需任何嵌套:

SELECT A.Employee_Number, Min(B.DateLoad) DateLoad
FROM Table1 A
INNER JOIN Table2 B ON B.Employee_Number = A.Employee_Number 
    AND a.DateLoad = b.DateLoad
GROUP BY A.Employee_Number

但我不能 100% 确定这在功能上等同于原始版本。

© www.soinside.com 2019 - 2024. All rights reserved.