Запрос на возврат результатов, только если значение не существует ни в одной строке - PullRequest
0 голосов
/ 17 января 2019

Не уверен, что заголовок объясняет это хорошо, но у меня есть таблица для регистрации. Допустим, у меня есть столбцы Order_ID, Status и Capture_ID. Я пытаюсь получить список всех Order_ID, которые не содержат Status из Complete ни в одной из строк этого порядка. Для каждого Order_ID.

может быть несколько записей.

Так что строки могут выглядеть так:

ORDER_ID      STATUS      Capture_ID
1245          COMPLETE    999
1245          ASSIGNED    999
1245          FAILED      999

Итак, я написал запрос, который возвращает результаты, которые не содержат Complete. Он просто возвращает ошибочные результаты, проблема в том, что он не проверяет, есть ли у ORDER_ID другие строки с COMPLETE.

Capture_ID используется для отслеживания статуса заказа. У Order_ID может быть 9 других строк, связанных с другими вещами, но capture_ID присваивается этому заказу и имеет 3 возможных записи: сбой, присвоение, завершение. Cpature_ID будет нулевым для всех остальных строк

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Я думаю, что этот вопрос требует команды МИНУС.

Select distinct(order_id)
  from {table_name}
MINUS
Select distinct(order_id)
  from (table_name}
where status = 'Complete'

Вы можете взять выходные данные из этого SQL и использовать их для дальнейших запросов по мере необходимости.

0 голосов
/ 17 января 2019

Если вам нужны только заказы в таблице, вы можете использовать group by и having:

select order_id
from t
group by order_id
having sum(case when status = 'COMPLETE' then 1 else 0 end) = 0;

Если вы хотите выполнить это для всех заказов, то я предполагаю, что у вас есть таблица orders. Используйте not exists:

select o.*
from orders o
where not exists (select 1
                  from orderstatuses os
                  where os.order_id = o.order_id and
                        os.status = 'COMPLETE'
                 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...