Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wählen Sie alle Spalten aus Tabelle 1 und eine Spalte aus Tabelle 2 aus, die gruppiert ist nach?

Ich würde listagg() verwenden in einer Unterabfrage:

select t1.*, xmlagg
from table1 t1 join
     (select name2, listagg(mother_name, ',') within group (order by mother_name) as xmlagg
      from table2 t2
      group by name2
     ) t2
     on t1.name1 = t2.name2;

BEARBEITEN:

Die obige Abfrage führt die Aggregation vor dem Join durch, sodass sie t1.* verwenden kann . Sie können dies auch nach dem Join tun:

select t1.name, listagg(mother_name, ',') within group (order by mother_name)
from table1 t1 join
     table2 t2
     on t1.name1 = t2.name2
group by t1.name;

Diese Form erschwert das Hinzufügen zusätzlicher Spalten zum select , aber Sie können nach Belieben aggregieren.