在多个不同相关子查询中重复使用相同表别名是否合规?
关于SELECT子句中相关子查询重复使用表别名的问题
你完全可以在第二个子查询中重复使用t1这个别名,核心原因如下:
- 每个被括号包裹的子查询都是独立的作用域,别名的生效范围仅限于其所在的子查询内部。第一个子查询里的
t1和第二个里的t1是完全独立的两个别名,彼此不会产生任何干扰。 - 子查询中的别名定义不会"永久生效"到外部或其他子查询,所以你不用担心第一个子查询的WHERE条件会影响第二个子查询的执行逻辑,也不会得到错误结果。
你的代码写法是完全合法且正确的,示例如下:
SELECT OutputColumnAlias1 = (select min(somedate) from Table1 t1 where t1.patientid=OuterTableAlias.patientid and t1.labname='labname1'), OutputColumnAlias2 = (select min(somedate) from Table1 t1 where t1.patientid=OuterTableAlias.patientid and t1.labname='labname2') FROM OuterTable OuterTableAlias
技术建议
虽然重复使用别名没问题,但如果想让代码可读性更强,可以考虑给不同子查询的别名加上区分标识(比如t1a、t1b),不过这完全是风格问题,不影响功能执行。只要每个子查询内部的别名和逻辑对应正确,重复使用相同别名是安全的。
内容的提问来源于stack exchange,提问作者ISAAC
相关产品推荐
相关产品推荐

