Sql 在一个查询中使用嵌套查询两次-用于FROM和WHERE

Sql 在一个查询中使用嵌套查询两次-用于FROM和WHERE,sql,sql-server,subquery,in-subquery,Sql,Sql Server,Subquery,In Subquery,我正试图弄明白为什么下面的Microsoft SQL代码不起作用。我简化了查询,因为它相当复杂。基本上,不起作用的部分是第二个嵌套子查询(a中的行)-我得到一个错误:无效的对象名“a” 如果您能给我一些建议,告诉我为什么它不起作用,以及如何让它起作用,我将不胜感激。一些关于为什么它不起作用的背景资料也会很有帮助,因为我很难找到关于嵌套查询局限性的任何信息,而不仅仅是一些基础知识 SELECT * FROM ( SELECT ... FROM ... ) a WHERE x IN( SELE

我正试图弄明白为什么下面的Microsoft SQL代码不起作用。我简化了查询,因为它相当复杂。基本上,不起作用的部分是第二个嵌套子查询(a中的行)-我得到一个错误:无效的对象名“a”

如果您能给我一些建议,告诉我为什么它不起作用,以及如何让它起作用,我将不胜感激。一些关于为什么它不起作用的背景资料也会很有帮助,因为我很难找到关于嵌套查询局限性的任何信息,而不仅仅是一些基础知识

SELECT * 
FROM (
SELECT ... FROM ...
) a

WHERE x IN( 
SELECT x 
FROM a  
WHERE v1=v2)

由于评论中建议使用CTE,我设法解决了我的问题。 所以我把它转换成:

WITH CTE_1
AS
 (
SELECT ... FROM ...
) 
SELECT * FROM CTE_1
WHERE x IN( 
SELECT x 
FROM CTE_1  
WHERE v1=v2)

也许您想要一个cte?它出现在,尽管错误可能是由伪查询中倒数第二行引起的,因为所讨论的
a
是第一个子查询的别名。您能提供任何示例日期和代码以便与调试一起工作会更有效吗?谢谢@jarlh,我刚刚查找了什么是cte,我设法使用cte重写了代码,使其工作正常。不幸的是,我无法提供样本日期,因为我处理的数据是私人敏感数据。但是问题解决了,谢谢!您在这里有更多信息: