Sql 使用外部查询属性限制内部查询
我目前有一个很大的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
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或不存在。