SQL篇·Oracle字段根据逗号等分割

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/womeng2009/article/details/84142450

一、业务场景介绍

有一个表字段存储了另一个表的关联字段,以“|”符号分割,如下所示:

连接查询中当然可以使用like来关联,但是效率很差。高效的做法应该是将该字段按照“|”字符分割,然后关联查询。

二、oracle分割查询方法

SELECT
	regexp_substr( 'a|b|c', '[^|]+', 1, ROWNUM ) result
FROM
	dual CONNECT BY ROWNUM <= length(
	regexp_replace( 'a|b|c', '[^|]', NULL )) + 1;

查询结果:

这个是原始的写法,“|”可以是别的字符,可以拿来修改。

三、应用

应用在我的场景中就是:

-- 分割pro_ids
SELECT
	regexp_substr( t.PRO_IDS, '[^|]+', 1, ROWNUM ) pro_ids
FROM
	( SELECT * FROM CMS_ARTICLE_PREVIEW WHERE id = '3918' ) t 
CONNECT BY ROWNUM <= length(regexp_replace( t.PRO_IDS, '[^|]', NULL )) + 1;

查询结果:

查询产品信息可以继续调整sql:

-- 分割pro_ids,并查询出相应产品信息
SELECT * FROM P_PRODUCT_PUBLICINFO WHERE FUNDCODE IN (
	SELECT
		regexp_substr( t.PRO_IDS, '[^|]+', 1, ROWNUM ) pro_ids
	FROM
		( SELECT * FROM CMS_ARTICLE_PREVIEW WHERE id = '3918' ) t 
	CONNECT BY ROWNUM <= length(regexp_replace( t.PRO_IDS, '[^|]', NULL )) + 1
);

为了信息保密性,此处不截图了。

当然,最终实际场景应用的sql更加复杂,这里只记录样例,需要时可以拿来灵活调整。

猜你喜欢

转载自blog.csdn.net/womeng2009/article/details/84142450