Sql 使用外部查询属性限制内部查询

Sql 使用外部查询属性限制内部查询,sql,oracle,join,Sql,Oracle,Join,我目前有一个很大的SQL查询,我需要修改它。我有一张交易和估价表。该交易与估值存在一对多关系。这两个表通过外键连接 如果某个交易在某个日期后没有估值,我被要求阻止任何交易及其后续估值被返回。我认为实现这一点的方法是使用内部查询,但我需要让内部查询知道外部查询和事务。比如: SELECT * FROM TRANSACTION_TABLE T INNER JOIN VALUATION_TABLE V WHERE T.VAL_FK = V.ID WHERE (SELECT COUNT(*) FRO

我目前有一个很大的SQL查询,我需要修改它。我有一张交易和估价表。该交易与估值存在一对多关系。这两个表通过外键连接

如果某个交易在某个日期后没有估值,我被要求阻止任何交易及其后续估值被返回。我认为实现这一点的方法是使用内部查询,但我需要让内部查询知道外部查询和事务。比如:

SELECT * FROM TRANSACTION_TABLE T 
INNER JOIN VALUATION_TABLE V WHERE T.VAL_FK = V.ID 
WHERE (SELECT COUNT(*) FROM V WHERE V.DATE > <GIVEN DATE>) > 1
显然,上述方法不起作用,因为内部查询是独立的,我不能从内部引用外部查询V引用。我该怎么做,还是有更简单的方法

这就是在外部查询中设置WHERE V.DATE>的情况,因为我想防止给定交易的任何估值超过指定日期,而不仅仅是超过指定日期的交易


非常感谢您提供的任何帮助。

您可能正在寻找这个

SELECT * 
FROM TRANSACTION_TABLE T 
INNER JOIN VALUATION_TABLE V1 ON T.VAL_FK = V1.ID 
WHERE (SELECT COUNT(*) 
       FROM VALUATION_TABLE V2 
       WHERE V2.ID = V1.ID AND V2.DATE > <GIVEN DATE>) > 1

你可以找这个

SELECT * 
FROM TRANSACTION_TABLE T 
INNER JOIN VALUATION_TABLE V1 ON T.VAL_FK = V1.ID 
WHERE (SELECT COUNT(*) 
       FROM VALUATION_TABLE V2 
       WHERE V2.ID = V1.ID AND V2.DATE > <GIVEN DATE>) > 1
如果执行时间很重要,那么您可能需要在实际数据上测试各种解决方案,看看哪种解决方案在您的情况下效果最好


如果执行时间很重要,您可能需要在实际数据上测试各种解决方案,看看哪种解决方案最适合您的情况。

我认为您希望>0。如果是这样的话,您可以使用exists来加快速度。再次阅读问题时,您可能需要相反的条件:=0或不存在。我认为您希望>0。如果是这样的话,您可以使用exists来加快速度。再次阅读问题时,您可能需要相反的条件:=0或不存在。