1

我希望能够在我的选择中重用子查询,而不必再次全部输入。有没有办法做到这一点?

例如,选择中的第一项是返回 NAME 的子查询。

在第二个选择项中,我想重用“NAME”子查询,而不必再次输入。

我查看了 CTE,但看不到您如何为 where 子句传递参数。在此示例中,我需要从子查询中的主查询访问 T1.ID,但我没有看到使用 CTE 的方法。

SELECT

(SELECT NAME FROM TABLE2 T2 WHERE T2.ID=T1.ID) AS NAME,

(SELECT STATE FROM TABLE3 T3 WHERE T3.NAME=(SELECT NAME FROM TABLE2 T2 WHERE T2.ID=T1.ID)) AS STATE

FROM TABLE1 T1



4

2 回答 2

2

这看起来像是横向连接的典型用例。在 TSQL 中,您可以使用outer apply

select t2.name, t3.state
from table1 t1
outer apply (select * from table2 t2 where t2.id   = t1.id  ) t2
outer apply (select * from table3 t3 where t3.name = t2.name) t3
于 2020-09-10T17:25:22.273 回答
0

我认为连接将被评估为 INNER JOIN。此查询应返回相同的输出

SELECT T2.[NAME], T3.[STATE]
FROM TABLE1 T1
     join TABLE2 T2 on T2.ID=T1.ID
     join Table3 T3 on T2.[NAME]=T3.[NAME];
于 2020-09-10T19:31:03.117 回答