在SQL Developer中判断两个列表是否存在至少一个公共元素的实现方法
SQL Developer 中判断两个列表是否存在公共元素的方案
需求说明
输入两个元素列表,判断是否存在至少一个公共元素,存在则返回结果1,不存在返回0,参考示例:
列表1:(a, b, c)
列表2:(z, a, x)
上述两个列表存在公共元素a,返回结果为1
实现方案(基于Oracle语法,适配SQL Developer)
方案1:集合交集判断法(推荐,适配任意长度列表)
利用Oracle的INTERSECT集合运算取两个列表的交集,搭配EXISTS判断交集是否非空,代码如下:
SELECT CASE WHEN EXISTS ( -- 转换第一个列表为行集,元素为字符串类型 SELECT COLUMN_VALUE FROM TABLE(SYS.ODCIVARCHAR2LIST('a','b','c')) INTERSECT -- 转换第二个列表为行集 SELECT COLUMN_VALUE FROM TABLE(SYS.ODCIVARCHAR2LIST('z','a','x')) ) THEN 1 ELSE 0 END AS 公共元素标记 FROM DUAL;
说明:
- 若列表元素为数值类型,将
SYS.ODCIVARCHAR2LIST替换为SYS.ODCINUMBERLIST即可 - 列表元素可按实际需求修改,不限长度
- 示例代码运行结果为1,符合预期
方案2:IN条件判断法(适合短列表场景)
如果列表元素数量少,可以直接用OR拼接IN判断:
SELECT CASE WHEN 'a' IN ('z','a','x') OR 'b' IN ('z','a','x') OR 'c' IN ('z','a','x') THEN 1 ELSE 0 END AS 公共元素标记 FROM DUAL;
内容的提问来源于stack exchange,提问作者DS_Tn
相关产品推荐
相关产品推荐

