Получить определенные записи из БД с помощью SQL - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть таблица с несколькими записями, где нет записи PLACE_ORDER, то есть порядка # 594886579291.Я хочу получить только заказ, в котором нет строки PLACE_ORDER, например 594886579291.

Если я выполняю простой запрос, например

SELECT * FROM ORDER_STATUS os WHERE os.SERVICE_NAME != 'OC'.

, он возвращает заказы 594886579290 & 594886579295 без OC.Мне нужно только 594886579291.

Я пытался самостоятельно присоединиться, но не повезло.

К вашему сведению - я использую DB2.

Table structure

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Другой способ:

SELECT ORDER_NUMBER FROM ORDER_STATUS WHERE SERVICE_NAME != 'OC'
MINUS
SELECT ORDER_NUMBER FROM ORDER_STATUS WHERE SERVICE_NAME  = 'OC'

Это также можно использовать в качестве дополнительного выбора для большего запроса:

  SELECT * 
  FROM ORDER_STATUS
  WHERE ORDER_NUMBER IN (
     SELECT ORDER_NUMBER FROM ORDER_STATUS WHERE SERVICE_NAME != 'OC'
     MINUS
     SELECT ORDER_NUMBER FROM ORDER_STATUS WHERE SERVICE_NAME  = 'OC'
     )
0 голосов
/ 09 февраля 2019

Если вы просто хотите получить номера заказа:

SELECT order_number
FROM ORDER_STATUS os 
GROUP BY order_number
HAVING SUM(CASE WHEN os.SERVICE_NAME = 'OC' THEN 1 ELSE 0 END) = 0;

Если вы хотите получить полную информацию о заказе, используйте NOT EXISTS:

SELECT os.*
FROM ORDER_STATUS os 
WHERE NOT EXISTS (SELECT 1
                  FROM ORDER_STATUS os2
                  WHERE os2.order_number = os.order_number AND
                        os2.SERVICE_NAME = 'OC'
                 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...