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))
を、しかし、もしあなたの関数は複雑な型を返します。前者のスタイルは、次のように複雑な型の1つのフィールドと比較して1つのクエリ内の他のフィールドを返すことができるため、好ましい形式です。
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
の両方を返します。
これは、相関サブクエリでは不可能です。
ありがとう、Quassnoi! – danielpradilla