Получение строк с заданным набором значений и без других - PullRequest
0 голосов
/ 19 июня 2020

Работа с Db2 в z / OS.

Рассмотрим простой пример таблицы ORDER и дочерней таблицы ORDER_ITEM. PK для ребенка ORD_NUM плюс PART_NUM. Я хочу найти строки в таблице ORDER_ITEM с частями, которые имеют только определенный набор значений PART_NUM и никакие другие. Так, например, если меня интересуют части

PART1, PART2 

, а в таблице ORDER_ITEM есть такие строки, как

ORD1 PART1
ORD1 PART2
ORD2 PART1
ORD3 PART2
ORD4 PART1
ORD4 PART2
ORD4 PART3

Запрос, например

SELECT blah FROM ORDER_ITEM WHERE PART_NUM IN ('PART1', 'PART2') 

правильно вернет ORD1, ORD2, ORD3, он также неверно вернет ORD4.

Я работаю с Db2 на z / OS.

Спасибо

1 Ответ

1 голос
/ 20 июня 2020

Я думаю, вы хотите:

select oi.*
from order_item oi
where not exists (select 1
                  from order_item oi2
                  where oi2.order_num = oi.order_num and
                        oi2.part_num not in ('PART1', 'PART2')
                 );

То есть получить все строки в таблице, в которых заказ не имеет части, не входящей в указанный список частей.

...