Nếu tôi cố gắng tạo cột có giá trị là lựa chọn trả về nhiều hàng, tôi gặp lỗi.PostgreSQL: Tại sao không thể truy vấn con dưới dạng biểu thức trả về nhiều hàng, nhưng chức năng có thể?
=> select (select 1 union select 2);
ERROR: more than one row returned by a subquery used as an expression
Nhưng nếu tôi tạo một chức năng thực hiện tương tự, tôi sẽ nhận được hành vi mà tôi muốn.
=> create or replace function onetwo() returns setof integer as $$
$> select 1 union select 2
$> $$ language 'sql' strict immutable;
CREATE FUNCTION
=> select onetwo();
onetwo
--------
1
2
Tại sao sự khác biệt?
+1 và tôi nghĩ rằng tôi đã thấy biểu mẫu 'SELECT f()' (cho hàm trả về 'f') được mô tả như là một cú pháp cú pháp cho' SELECT * FROM f() '. Nó chỉ được thực hiện bởi vì nó rõ ràng và một cách viết tắt thuận tiện. – Edmund