日期:2014-05-17  浏览次数:20700 次

ORACLE查询
表TB1:里面有个字段是另外一个表TB2的ID字符串组,用,号分开的,比如1,2,3,4

问题:如何根据TB1的这个ID列字段查询出TB2ID对应的用户名,并且也是用,号分开

比如

TB1 字段  TID 1,2,3,4
TB2
1 用户名1
2 用户名2
3 用户名3
4 用户名4

查询出来要组成这样  用户名1,用户名2,用户名3,用户名4

ORACLE

------解决方案--------------------
你第一次给我们的数据TB1和TB2刚好相反啊,
如下:

SELECT T3.ID, LTRIM(MAX(SYS_CONNECT_BY_PATH(T3.NAME, ',')), ','), T3.MEMO
  FROM (SELECT ROW_NUMBER() OVER(PARTITION BY T2.RNUM ORDER BY T1.NAME) RN,
               T1.NAME,
               T2.RNUM,
               T2.ID,
               T2.MEMO
          FROM TB1 T1,
               (SELECT T.ID,
                       T.RNUM,
                       REGEXP_SUBSTR(T.TB1ID, '[^,]+', 1, LEVEL) STR,
                       T.MEMO
                  FROM (SELECT T.ID, T.TB1ID, ROWNUM RNUM, T.MEMO FROM TB2 T) T
                CONNECT BY LEVEL <=
                           (LENGTH(T.TB1ID) -
                           LENGTH(REPLACE(T.TB1ID, ',', ''))) / LENGTH(',') + 1
                       AND PRIOR RNUM = RNUM
                    &nb