在拼接的字符串中根据代码显示名称

来源:互联网 发布:战舰少女r重炮改数据 编辑:程序博客网 时间:2024/04/19 07:23

    实际项目中,经常会出现这样一种设计。例如,一张项目表,有个项目负责人的字段,而项目和负责人出现一对多的关系。本来规范来说,应该建一张项目与负责人的关系表,但是很多时候,会直接采用多个项目负责人之间用逗号隔开存进这个字段的做法。如果存的是ID,查询时需要将对应的人带出来怎么办


    借用帖子中的例子 http://bbs.csdn.net/topics/391023423?page=1#post-399141457


    比较简单的是使用wm_concat函数

SELECT OID,(SELECT wm_concat(b.zone_code||'-'||b.zone_name) FROM tableb b WHERE ','||a.zone_code||',' LIKE '%,'||b.zone_code||',%')zone_nameFROM tablea a;

    但是,wm_concat并不保证顺序,排列顺序和执行计划有关系。可以采用下面的做法

SELECT OID,       (SELECT SUBSTR(MAX(SYS_CONNECT_BY_PATH(B.ZONE_CODE || '-' ||                                              B.ZONE_NAME,                                              ',')),                      2)          FROM TABLEB B         START WITH B.ZONE_CODE =                    SUBSTR(A.ZONE_CODE,                           1,                           INSTR(A.ZONE_CODE || ',', ',', 1, 1) - 1)        CONNECT BY B.ZONE_CODE =                   SUBSTR(A.ZONE_CODE,                          INSTR(',' || A.ZONE_CODE, ',', 1, LEVEL),                          INSTR(A.ZONE_CODE || ',', ',', 1, LEVEL) -                          INSTR(',' || A.ZONE_CODE, ',', 1, LEVEL))) ZONE_NAME  FROM TABLEA A;


0 0
原创粉丝点击