Выборка необычных записей на основе статуса

#sql #oracle #oracle11g

#sql #Oracle #oracle11g

Вопрос:

У меня есть две таблицы. Мне нужно извлечь записи из T2, которых нет в T1, на основе статуса. Я не уверен, что если я выполняю левое внешнее соединение, я получаю все записи из T1. Я понимаю причину, но не уверен, как это исправить. Не могли бы вы указать.

T1

введите описание изображения здесь

и T2

введите описание изображения здесь

Вывод:

введите описание изображения здесь

Запрос, который я пробовал.

 SELECT T2.*
FROM T2 LEFT OUTER JOIN T1 
ON T2.DOC_NO=T1.DOC_NO
WHERE T2.STATUS='Cleared' and T1.STATUS !='Cleared' 
 

Комментарии:

1. . . » Мне нужно извлечь записи из T2, которых нет в T1, на основе статуса. » Это не четкое описание того, что вы хотите сделать. Можете ли вы предоставить более подробную информацию?

2. Если DOC_NO очищен как в T1, так и в T2, я не должен приносить этот документ no из T2..

Ответ №1:

Вы можете использовать NOT EXISTS следующее:

 SELECT T2.*
  FROM T2 
 WHERE NOT EXISTS 
  (SELECT 1 FROM T1
    WHERE T1.DOC_NO = T2.DOC_NO
      AND T1.STATUS = 'Cleared');
 

Ответ №2:

На основе предоставленного вами примера неясно, как используется фильтрация состояния. Это больше похоже на то, что вам нужен оператор МИНУС:

 select doc_no, status, amount from t2
minus
select doc_no, status, amount from t1;
 

Спасибо.