2017-02-15 2 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 

Логика, что я хочу немного сложным, но я пытаюсь найти способ ссылаться на reportdate из таблицы обув в baar_value-где предложение в следующем запросе:

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 
) 

как проверить, если foo.reportdate между baar_value.from_date и baar_value_to_date?

+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

Смежные вопросы