如何在select子句中重用子查询?

问题描述

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...