我遇到运营商不存在的问题,
我尝试执行查询时出现integer = integer[] error
select staff
from affiliations
where orgUnit = any (select unnest(*) from get_ou(661));
函数get_ou(661)
返回一个整数数组。我想知道为什么我不能使用= any
从阵列中的任何组织中获取工作人员。
感谢您的帮助!
答案 0 :(得分:1)
与subselect一起使用的 ANY 谓词可确保将值与subselect返回的任何值进行比较。
postgres=# SELECT * FROM foo_table; ┌────┬───┐ │ id │ x │ ╞════╪═══╡ │ 1 │ 9 │ │ 2 │ 4 │ │ 3 │ 1 │ │ 4 │ 3 │ │ 5 │ 7 │ │ 6 │ 5 │ │ 7 │ 3 │ │ 8 │ 8 │ │ 9 │ 3 │ │ 10 │ 8 │ └────┴───┘ (10 rows) CREATE OR REPLACE FUNCTION public.foo(VARIADIC integer[]) RETURNS integer[] LANGUAGE sql AS $function$ SELECT $1 $function$
很奇怪,你的例子坏了(但语法错误)。当我修复它时,它正在工作:
postgres=# SELECT * FROM foo_table
WHERE x = ANY(SELECT unnest(v) FROM foo(3,8) g(v));
┌────┬───┐
│ id │ x │
╞════╪═══╡
│ 4 │ 3 │
│ 7 │ 3 │
│ 8 │ 8 │
│ 9 │ 3 │
│ 10 │ 8 │
└────┴───┘
(5 rows)
您应该更改语法并从subselect移动到数组表达式(此解决方案应该首选用于此目的):
postgres=# SELECT * FROM foo_table WHERE x = ANY(foo(3,8));
┌────┬───┐
│ id │ x │
╞════╪═══╡
│ 4 │ 3 │
│ 7 │ 3 │
│ 8 │ 8 │
│ 9 │ 3 │
│ 10 │ 8 │
└────┴───┘
(5 rows)