多条件SQL交集算法
1. 使用自建split方法将以逗号分隔的ID 创建为表格形式,例如 3,4,5,6,7
网络上应该可以看到很多这算法的源码,网友自己写一个也不是很难。
给个oracle的范例
2. 建立关联表 QJIDs.column_value=A.QJID
3. 使用分组方法,如果ID重复出现被分割次 即是表示,在所有满足条件的情况该记录都出现过 即是交集
SELECT ZBBH,KHBH,ZBMC,SJZB FROM jxkh_t_qjzbxx_B A
inner join table(fun_getsplit('3,4,5,6,7',',')) QJIDs on QJIDs.column_value=A.QJID
group by ZBBH ,KHBH,ZBMC,SJZB having(count(QJID)=5)
4. 同理可以推出 having(count(QJID)<5) and having(count(QJID)>0)是交集的反集合 即是 集合-交集。
5. 同理可以推出 having(count(QJID)>0) 是整个并集。
小节:其实理解起来也不难,qjid出现5次,说明3,4,5,6,7中都有该数据 毫无疑问这时5个区间的交集。