0

私は Oracle テクノロジーを初めて使用します。以前、要件を理解していなかったため、同じ問題について 2 つの投稿を投稿しました。

表1:

MSGID
-----
1,2,3
2,3
4
null
null

表 2:

MID   MSGDESC
----  -------
1     ONE
2     TWO
3     THREE
4     FOUR

期待される出力:

XCOL     DESC
-----    -----
1,2,3    ONE,TWO,THREE
2,3      TWO,THREE
4        FOUR

この要件を満たすことができません。1つの解決策を教えてください。

注: テーブルには、一意のキーまたは主キーの値はありません。テーブル 1 には 5000 のレコードがあり、テーブル 2 には説明付きの 80 のレコードしかありません。

4

1 に答える 1

0
create table Table1 (MSGID varchar2(100));

insert into Table1 values ('1,2,3');
insert into Table1 values ('2,3');
insert into Table1 values ('4');
insert into Table1 values (null);
insert into Table1 values (null);

create table Table2 (MID varchar2(100), MSGDESC varchar2(100));

insert into Table2 values ('1','ONE');
insert into Table2 values ('2','TWO');
insert into Table2 values ('3','THREE');
insert into Table2 values ('4','FOUR');

select
  msgid as xcol, 
  "DESC", 
  col1, col2, ..., col12
from
  Table1
  left join (
    select
       msgid,
       wm_concat(msgdesc) as "DESC"
    from
       (
          select
             msgid,
             msgdesc
          from
             (select distinct msgid from Table1 where ...)
             cross join (
                select level as occ from dual connect by level <= 100)
             )
             left join Table2
                on mid = regexp_substr(msgid, '[^,]+', 1, occ)
          where
             occ <= regexp_count(msgid, ',') + 1
          order by msgid, occ
       )
    group by msgid
  ) using (msgid)
于 2013-04-16T18:02:17.690 に答える