首页 > 解决方案 > 如何在选择子句中重用子查询?

问题描述

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

例如,选择中的第一项是返回 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



标签: sqltsqlsubquerylateral-join

解决方案


这看起来像是横向连接的典型用例。在 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

推荐阅读