【发布时间】:2009-05-14 16:52:47
【问题描述】:
我想写一个SELECT语句如下:
SELECT field_a
FROM my_table
WHERE field_b IN (my_function(field_c)).
这可能吗?
my_function 必须返回一个数组?
我使用的是 PostgreSQL 8.2
【问题讨论】:
标签: sql postgresql
我想写一个SELECT语句如下:
SELECT field_a
FROM my_table
WHERE field_b IN (my_function(field_c)).
这可能吗?
my_function 必须返回一个数组?
我使用的是 PostgreSQL 8.2
【问题讨论】:
标签: sql postgresql
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。
这对于关联的子查询是不可能的。
【讨论】:
只要 my_function 的返回类型只是一个与 field_b 类型相同的结果集(如 Varchar(20) 或 int),那么你应该没问题。
【讨论】: