2016-10-14 11 views
1

私は現在、変更が必要な大規模なSQLクエリ(私ではない)を持っています。私は取引と評価表を持っています。取引には評価との1対多の関係があります。 2つのテーブルは、外部キーを介して結合されています。外部クエリ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 exist'が必要なように見えます。 – 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> 
      ) 

を探していることがあります。

関連する問題