您的位置:首页 > 房产 > 建筑 > 商务推广_公司企业邮箱管理制度_如何做互联网营销推广_武汉排名seo公司

商务推广_公司企业邮箱管理制度_如何做互联网营销推广_武汉排名seo公司

2024/10/7 21:30:33 来源:https://blog.csdn.net/qq_36138652/article/details/142585818  浏览:    关键词:商务推广_公司企业邮箱管理制度_如何做互联网营销推广_武汉排名seo公司
商务推广_公司企业邮箱管理制度_如何做互联网营销推广_武汉排名seo公司

出现问题的原因和背景

oracle进行关联查询的时候因为字段存在多个用逗号切割的id,导致查询的过程中报无效数字或非法数字

问题复现

新建表A

CREATE TABLE  "A" (id NUMBER NOT NULL,name VARCHAR2(255 BYTE)
)INSERT INTO "A" VALUES ('1', '上海');
INSERT INTO "A" VALUES ('2', '北京');
INSERT INTO "A" VALUES ('3', '广州');
INSERT INTO "A" VALUES ('4', '深圳');

新建表B


CREATE TABLE  "B" (id NUMBER NOT NULL,aid VARCHAR2(255 BYTE)
)INSERT INTO "B" VALUES ('1', '1,2,3');
INSERT INTO "B" VALUES ('2', '1,2');
INSERT INTO "B" VALUES ('3', '1,2,3,4');

问题复现

select * from A  where id  in (select aid from B  where id = 3)

产生的原因:因为查询过程中,多个id放在了一个字段,这个字段不止有数字也有逗号,id是数字类型,所以数据库识别以后直接会报非法数字。

解决方法

先将子查询转成多行

	WITH split_string AS (SELECT   (select aid from B  where id = 3)AS string FROM dual)
SELECT REGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) AS aid
FROM split_string
CONNECT BYREGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) IS NOT NULL;

再次查询A表数据


select * from A  where id  in (	WITH split_string AS (SELECT   (select aid from B  where id = 3)AS string FROM dual)
SELECT REGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) AS aid
FROM split_string
CONNECT BYREGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) IS NOT NULL)

将A表的名称转成一行

select LISTAGG(name,',') WITHIN GROUP (ORDER BY name) 关联流程 from A where  id in (	WITH split_string AS (SELECT   (select aid from B  where id = 3)AS string FROM dual)
SELECT REGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) AS split_value
FROM split_string
CONNECT BYREGEXP_SUBSTR(string, '[^,]+', 1, LEVEL) IS NOT NULL) 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com