问题描述
我希望能够在我的选择中重用子查询,而不必再次全部输入。有办法吗?
例如,选择中的第一项是返回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
解决方法
这看起来像是横向连接的典型用例。在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
,
我认为联接将被评估为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];