如何减少 SQL 视图中的子查询

How to reduce subqueries in a SQL View

我有一个包含多个子查询的查询,它正在减慢速度。许多子查询是相同的记录但不同的字段。我想知道是否有一种方法可以查询该记录一次而不是四次。

例如:

select 
field1 as (select field1 from people where company = g.company),
field2 as (select field2 from people where company = g.company),
field3 as (select field3 from people where company = g.company),
field4 as (select field4 from people where company = g.company)
from peopleGroup g

SELECT子句中的子查询有它的用处,但一般都是异常解决问题。相反,做你正在做的事情的正确方法是在你的 FROM 子句中正确地加入你的两个表:

SELECT people.field1, people.field2, people.field3, people.field4
FROM peopleGroup g
    LEFT OUTER JOIN people
         ON g.company = people.company

如果出于某种原因你仍然想进行子查询(比如 TOP 1),那么你可以使用 APPLY

select 
  p.field1,
  p.field2,
  p.field3,
  p.field4
from peopleGroup g
outer apply (
    select
      p.field1,
      p.field2,
      p.field3,
      p.field4
    from people p
    where p.company = g.company
) p;

OUTER APPLY模拟一个LEFT JOINCROSS APPLY模拟一个INNER JOIN