Select 来自 SQL 服务器中子查询的多列

Select multiple columns from a subquery in SQL Server

我知道如何 select 来自子查询的字段:

SELECT 
    ID, fck, f1, 
    (SELECT f2 FROM tbl2 Y WHERE Y.ID = T.fck) AS f2
FROM 
    tbl1 T

如果我需要 select 来自子查询的两列,实际上我是这样做的:

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

有没有办法避免两次子查询?类似于:

SELECT 
    ID, fck, f1, 
    (SELECT f2, f3 FROM tbl2 Y WHERE Y.ID = T.fck) AS f2, f3
FROM 
    tbl1 T

数据库是 SQL Server 2008 R2。

我知道这个简单的示例可以使用 JOIN 重写,但在实际情况下没有使用 JOIN 的等效形式。

您可以使用 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

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

相关子查询用于获取单个值,但您可以简单地将子查询转换为连接来执行您需要的操作:

SELECT T.ID, T.fck, T.f1, Y.f2, Y.f3
FROM tbl1 T
INNER JOIN tbl2 Y ON Y.ID = T.fck

与任何联接一样,您还需要确定您是否需要 INNER JOINOUTER JOIN,并确保您了解 table 之间的关系是否为 1.. 1、1..N 等,但通常这是从相关 table.

中获取多个字段的方法