从SQL Server中的子查询中选择多个列

Mar*_*ala 3 sql-server subquery

我知道如何从子查询中选择一个字段:

SELECT 
    ID, fck, f1, 
    (SELECT f2 FROM tbl2 Y WHERE Y.ID = T.fck) AS f2
FROM 
    tbl1 T
Run Code Online (Sandbox Code Playgroud)

如果我需要从子查询中选择两列,实际上我是这样做的:

SELECT 
    ID, fck, f1, 
    (SELECT f2 FROM tbl2 Y WHERE Y.ID = T.fck) AS f2, 
    (SELECT f3 FROM tbl2 Y WHERE Y.ID = T.fck) AS f3
FROM 
    tbl1 T
Run Code Online (Sandbox Code Playgroud)

有一种方法可以避免两个子查询?就像是:

SELECT 
    ID, fck, f1, 
    (SELECT f2, f3 FROM tbl2 Y WHERE Y.ID = T.fck) AS f2, f3
FROM 
    tbl1 T
Run Code Online (Sandbox Code Playgroud)

数据库是SQL Server 2008 R2.

我知道这个简单的例子可能会使用JOIN重写,但实际上有些情况下没有使用JOIN的等效表单.

Gio*_*sos 16

你可以使用OUTER APPLY:

SELECT t1.ID, t1.fck, t1.f1, t3.f2, t3.f3
FROM tbl1 AS t1
OUTER APPLY (
   SELECT f2, f3 
   FROM tbl2 AS t2 
   WHERE t2.ID = t1.fck) AS t3
Run Code Online (Sandbox Code Playgroud)

SELECT子句包含标量值,因此它不能处理返回多于字段的子查询或一个字段的多个记录.