表a:
id jgdm
1  1;2;3
2  3;4;5表b:
jgdm jgmc
 1   北京
 2   沈阳
 3   长春
 4   成都
 5   上海条件是,我得知表a中的id=1,
1.
我现在想用一句话查出a表中下面这样的一条记录
id jgmc
1  北京
1  沈阳
1  长春
不知道可不可能得到
2.
如果可以下面的,更好了
id jgmc
1  北京;沈阳;长春

解决方案 »

  1.   

    -- 10G VERSION OF ORACLE, TRY BELOW SQL QUERY:
    SQL> SELECT A.ID, REPLACE(WMSYS.WM_CONCAT(B.JGMC), ',', ';') NEW_JGMC
      2    FROM A,
      3         B,
      4         (SELECT ROWNUM RN
      5            FROM DUAL
      6          CONNECT BY ROWNUM <= (SELECT MAX(LENGTHB(JGDM) -
      7                                           LENGTHB(REPLACE(JGDM, ';', '')))
      8                                  FROM A
      9                                 WHERE ID = 1))
     10   WHERE INSTR(';' || A.JGDM || ';', ';', 1, RN) > 0
     11     AND SUBSTR(';' || A.JGDM || ';',
     12                INSTR(';' || A.JGDM || ';', ';', 1, RN) + 1,
     13                INSTR(';' || A.JGDM || ';', ';', 1, RN + 1) -
     14                INSTR(';' || A.JGDM || ';', ';', 1, RN) - 1) = B.JGDM
     15     AND ID = 1
     16   GROUP BY ID;ID NEW_JGMC
    -- --------------------------------------------------------------------------------
    1  北京;沈阳;长春
      

  2.   

    2楼的可以...但是应该不用这么复杂....select id,replace(wmsys.wm_concat(jgmc),',',';') jgmc
    from(
         select a.id,b.jgmc from a
         left join b on instr(';'||a.jgdm||';',';'||b.jgdm||';')>0
        )
    group by id;