Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Nối hai bảng với một cột có nhiều mục nhập cho bảng khác

Nó không quá khó, nhưng - như bạn đã nói, bạn không muốn làm điều đó.

SQL> with
  2  t1 (pk, info) as
  3    (select 1, 'one' from dual union
  4     select 2, 'two' from dual union
  5     select 3, 'three' from dual
  6    ),
  7  t2 (pk, fkt1) as
  8    (select 1, '1,3' from dual union
  9     select 2, '1,2,3' from dual union
 10     select 3, '2' from dual
 11    ),
 12  t2rows as
 13    (select pk, regexp_substr(fkt1, '[^,]+', 1, column_value) fkt1, column_value rn
 14     from t2,
 15          table(cast(multiset(select level from dual
 16                              connect by level <= regexp_count(fkt1, ',') + 1
 17                             ) as sys.odcinumberlist))
 18    )
 19  select t2r.pk,
 20    listagg(t2r.fkt1, ',') within group (order by t2r.rn) fkt1,
 21    listagg(t1.info, ',') within group (order by t2r.rn) infot1
 22  from t2rows t2r join t1 on t2r.fkt1 = t1.pk
 23  group by t2r.pk
 24  order by t2r.pk;

        PK FKT1                 INFOT1
---------- -------------------- --------------------
         1 1,3                  one,three
         2 1,2,3                one,two,three
         3 2                    two

SQL>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi từ ANSI sang Oracle Tham gia Cú pháp

  2. Oracle cùng một tên bảng trên các lược đồ khác nhau?

  3. Khóa duy nhất trong Oracle với các ví dụ

  4. Cách tìm THAM GIA LEFT OUTER hoặc RIGHT OUTER JOIN với ORACLE JOIN (+)

  5. Nhầm lẫn với Oracle CONNECT BY