#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;
Спасибо.