SELECT *
FROM (
SELECT field_a, field_b, my_function(field_c) fc
FROM mytable
) q
WHERE field_b = fc
Тип возврата вашей функции должен быть SETOF
(например, SETOF INT
, SETOF VARCHAR
и т. Д.)
Обратите внимание, что вы можете использовать выражение стиля IN
, например:
SELECT field_a, field_b
FROM mytable
WHERE field_b IN (SELECT my_function(field_c))
, но если ваша функция возвращает сложный тип, предпочтительнее использовать прежний стиль, поскольку вы можете сравнить одно поле сложного типа и вернуть другое в одном запросе, например:
FUNCTION my_function RETURNS SETOF anothertable
/* This will return a set of records of same layout as in table "anothertable" */
SELECT field_a, field_b, fc.column1, fc.column2
FROM (
SELECT field_a, field_b, my_function(field_c) fc
FROM mytable
) q
WHERE field_b = fc.column1
Здесь мы сравниваем с column1
и возвращаем column1
и column2
.
Это было бы невозможно с коррелированным подзапросом.