2016-10-14 78 views
1

我目前有一個大的SQL查詢(不是我的),我需要修改。我有一個交易和估價表。該交易與估值具有一對多關係。兩個表正在通過外鍵連接。限制內部查詢與外部查詢atttribute

如果沒有超過特定日期的交易評估存在,我被要求阻止任何交易(及其隨後的估價)被退回。我想我會實現這一點的方式是使用內部查詢,但我需要使內部查詢知道外部查詢和事務。因此,像:

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>的情況,因爲我想阻止給定事務的任何評估,如果它們中的任何一個超過了指定的日期,而不僅僅是指定的日期。

非常感謝您提供的任何幫助。

回答

0

你可能在找這個

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

謝謝,這似乎工作 –

+0

我認爲你(OP)要''0'。如果是這樣,你可以使用'exists'來加快速度。 – shawnt00

+0

再次閱讀問題,它也顯示您可能想要相反的條件:'= 0'或'not exists'。 – shawnt00

0
SELECT * 
FROM TRANSACTION_TABLE T 
     INNER JOIN VALUATION_TABLE V1 ON T.VAL_FK = V.ID 
WHERE V.ID IN (SELECT ID 
       FROM VALUATION_TABLE 
       WHERE DATE > <GIVEN DATE> 
      ) 

如果執行時間是非常重要的,你可能想在你的實際數據測試各種解決方案,看哪個最適合你的情況。