PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Операторът не съществува:integer =integer[] в заявка с ANY

Въз основа на частта от съобщението за грешка operator does not exist: integer = integer[] , изглежда, че bs колоната трябва да е unnest ed, за да върнете дясната страна обратно към integer така че операторът за сравнение може да бъде намерен:

WITH bar AS (
  SELECT array_agg(b) AS bs
  FROM foo
  WHERE c < 3
)
SELECT a
FROM foo
WHERE b = ANY ( SELECT unnest(bs) FROM bar);

Това води до резултата:

A
2
3

Имайки предвид документа за ВСЯКА функция :

... грешката има смисъл, тъй като изразът отляво е integer -- колона b -- докато десният израз е масив от integer s или integer[] и така сравнението завършва във формата integer =integer[] , който няма оператор и следователно води до грешката.

unnest ing на integer[] стойност прави левия и десния израз integer s и така сравнението може да продължи.

Модифициран SQL Fiddle .

Забележка: че същото поведение се наблюдава при използване на IN вместо = ANY .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да намерите поднизове в SQL (Postgres)

  2. хибернация с c3p0:createClob() все още не е внедрен

  3. Транзакция във функция plpgsql

  4. pg_dump:как да инсталирате на Amazon Linux за PostgreSQL 9.5.2?

  5. PostgreSQL ОПИСАНИЕ ТАБЛИЦА Еквивалент