Sử dụng hàm tổng hợp :
select
usr_id,
name,
array_agg(tag_id) as tag_arr
from users
join tags using(usr_id)
group by usr_id, name
hoặc hàm tạo mảng từ kết quả của một truy vấn con:
select
u.usr_id,
name,
array(
select tag_id
from tags t
where t.usr_id = u.usr_id
) as tag_arr
from users u
Tùy chọn thứ hai là truy vấn một nguồn đơn giản trong khi tùy chọn đầu tiên chung chung hơn, đặc biệt thuận tiện khi bạn cần nhiều tổng hợp từ một bảng có liên quan. Ngoài ra, biến thể đầu tiên sẽ nhanh hơn trên các bảng lớn hơn.
Lưu ý rằng để có hiệu suất tốt hơn, hãy usr_id
các cột trong cả hai bảng phải được lập chỉ mục. Trong khi thường là users.usr_id
là một khóa chính, đôi khi người ta có thể quên rằng chỉ mục của cột tham chiếu cũng rất hữu ích.