2017-02-15 13 views
1

私はいくつかの列を持つ次のテーブルがあります。オラクル

foo 
    reportdate baar 
    01.04.16 1 

    baar_value 
    b_value from_date to_date 
    1  01.01.16 01.01.17 
    1  01.01.15 01.01.16 

私が何をしたいのロジックは少し複雑ですが、私は見つけるためにしようとしていますがfoo.reportdateはbaar_value.from_dateとbaar_value_to_dateの間にあるかどうかを確認する方法

SELECT * 
FROM foo 
WHERE baar IS NOT NULL 
AND NOT EXISTS 
    (SELECT * 
    FROM baar_value 
    WHERE b_value = baar 
    AND reportdate 
    BETWEEN from_date AND to_date 
) 

:次のクエリでbaar_value-句でテーブルfooのからreportdateを参照する方法はありますか?あなたの説明から

+0

recs_type_i930は何ですか?また、そのサンプルデータの予想結果を投稿してください。 – Aleksej

+0

私はこれを変更しました:) – Ronald

答えて

0

は、多分あなたは、単純に以下が必要:

SELECT * 
FROM foo 
WHERE baar IS NOT NULL 
AND NOT EXISTS 
    (SELECT * 
    FROM baar_value 
    WHERE b_value = baar 
    AND foo.reportdate BETWEEN from_date AND to_date 
) 

テスト:

SQL> create table foo(reportdate, baar) as 
    2  select date '2016-04-01', 1 from dual; 

Table created. 

SQL> create table baar_value(b_value, from_date, to_date) as 
    2  select 1, date '2016-01-01', date '2017-01-01' from dual union all 
    3  select 1, date '2015-01-01', date '2016-01-01' from dual; 

Table created. 

SQL> SELECT * 
    2 FROM foo 
    3 WHERE baar IS NOT NULL 
    4 AND NOT EXISTS 
    5    (SELECT * 
    6    FROM baar_value 
    7    WHERE b_value = baar 
    8     AND foo.reportdate BETWEEN from_date AND to_date 
    9    ); 

no rows selected 
+0

ORA-00904: "foo"。 "reportdate"無効な識別子 – Ronald

+0

このエラーが発生していて、テーブル構造は投稿したとおりですか?ちょうどテストを投稿しました – Aleksej