Đây không phải là vấn đề không tốt như vậy, mà là về cách xử lý rất kỳ lạ của PostgreSQL đối với nhiều hàm trả về bộ trả về trong SELECT
danh sách. Đặt các hàm trả về trong SELECT
không phải là một phần của tiêu chuẩn ANSI SQL.
Bạn sẽ thấy hành vi tốt hơn nhiều với LATERAL
các truy vấn, nên được ưu tiên hơn so với việc sử dụng hàm set-return trong FROM
càng nhiều càng tốt:
select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
ví dụ:
regress=> select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
a | b
---+---
1 | 1
1 | 2
1 | 3
2 | 1
2 | 2
2 | 3
(6 rows)
Lần duy nhất tôi vẫn sử dụng nhiều hàm trả về thiết lập trong SELECT
là khi tôi muốn ghép nối các giá trị từ các hàm mà cả hai đều trả về cùng một số hàng. Nhu cầu về điều đó sẽ không còn nữa trong 9.4, với đa đối số unnest
và với sự hỗ trợ cho WITH ORDINALITY
.