Select 检索具有给定值集且没有其他值的行

Select 检索具有给定值集且没有其他值的行,select,db2,zos,db2-zos,Select,Db2,Zos,Db2 Zos,在z/OS上使用Db2 考虑订单表和子订单项目表的一个简单示例。子项的主键是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 OR

在z/OS上使用Db2

考虑订单表和子订单项目表的一个简单示例。子项的主键是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

我正在z/OS上使用Db2

谢谢

我想你想要:

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')
                 );

也就是说,获取表中订单未包含不在指定零件列表中的零件的所有行。

非常感谢。你知道,本能地,我会写select oi.*从order_item oi,其中oi.part_num在'PART1','PART2'中不存在,从order_item oi2中选择1,其中oi2.order_num=oi.order_num和oi2.part_num不在'PART1','PART2'中;但是很明显,我不需要第一个谓词,我只是很难在它产生我想要的结果的时候把我的头绕在它周围!