Как примечание, независимо от подхода, вы можете найти коррелированный подзапрос более простым, чем большая агрегация:
select t1.*,
(select string_agg(t2.materialTypeID, ',') within group (order by t2.materialTypeID)
from table2 t2
where t2.typeID = t1.typeID and
t2.activityID = t1.activityID
) as materialTypeIds
from table1 t1;
Или:
select t1.*,
stuff( (select concat(',', t2.materialTypeID)
from table2 t2
where t2.typeID = t1.typeID and
t2.activityID = t1.activityID
for xml path ('')
), 1, 1, ''
) as materialTypeIds
from table1 t1;
В целом, избегая внешней агрегацииповышает производительность, особенно если есть индекс на table2(typeID, activityId)
.