【问题标题】:operator does not exist: integer = integer[] plpgsql error运算符不存在:整数 = 整数 [] plpgsql 错误
【发布时间】:2016-05-13 16:27:48
【问题描述】:

我有一个操作员不存在的问题, integer = integer[] error 在我尝试执行查询时出现

select staff
from affiliations
where orgUnit = any (select unnest(*) from get_ou(661));

函数get_ou(661) 返回一个整数数组。我想知道为什么我不能使用= any 从阵列中的任何一个组织中获取人员。

感谢您的帮助!

【问题讨论】:

    标签: sql arrays plpgsql


    【解决方案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 行) 创建或替换函数 public.foo(VARIADIC integer[]) 返回整数[] 语言 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)
    

    你应该改变语法并从子选择转移到数组表达式(这个解决方案应该是首选):

    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)
    

    【讨论】:

      猜你喜欢
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 2020-02-05
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 2014-06-30
      相关资源
      最近更新 更多