补集EXCEPT 的使用
补集的定义:
参数说明:
● UNION: 求两个数据集的并集,即将两个数据集合并成一个数据集。
● INTERSECT:求两个数据集的交集。即输出两个数据集均包含的记录。
● EXCEPT: 求第二个数据集在第一个数据集中的补集。即输出第一个数据集包含而第二个数据集不包含的记录。
其实这个理解有点抽象,应该理解为去掉A集合中,B也存在的元素。
● MINUS: 等同于EXCEPT。
用例:
SELECT wlzbm,wlzms FROM uf_SAP_wlz WHERE wlfl = 'Z004' EXCEPT SELECT wlzbm,wlzms FROM uf_SAP_wlz WHERE ZFL != ''
实际例子:
可以看到,物料分类关联中分类,中分类再关联物料组编码
但这个关联不是连续的。
有一些是物料分类直接对接到了物料组编码
实际用到的时候,如果用户选择了物料分类,那么就要去看中分类能否选择。
如果中分类有,选择后到物料组继续选择。
如果中分类没有,则直接到物料组选择。
解决这个中间层级有可能缺失的情况。
思路:
先:
SELECT wlzbm,wlzms FROM uf_SAP_wlz WHERE wlfl = 'Z001'
找出这个物料分类对应的物料组。
这个是一定有的。
再
SELECT wlzbm,wlzms FROM uf_SAP_wlz WHERE ZFL != '201'
找出不是中分类的集合。
最后用到补集就能找到该中分类的集合了。
这样一个好处,就是当中分类不存在集合的时候,在与物料分类做补集的时候,能完整带出物料分类对应的所有物料组编码。