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 JOIN
与 OUTER JOIN
,并确保您了解 table 之间的关系是否为 1.. 1、1..N 等,但通常这是从相关 table.
中获取多个字段的方法
我知道如何 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 JOIN
与 OUTER JOIN
,并确保您了解 table 之间的关系是否为 1.. 1、1..N 等,但通常这是从相关 table.