sql >> Database >  >> RDS >> PostgreSQL

Operator bestaat niet:integer =integer[] in een query met ANY

Op basis van het foutberichtgedeelte bestaat de operator does not exist: integer = integer[] , lijkt het erop dat de bs kolom moet unnest . zijn ed, om de rechterkant terug te krijgen naar een integer zodat de vergelijkingsoperator kan worden gevonden:

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);

Dit resulteert in de output:

A
2
3

Gezien het document voor de ANY functie :

... de fout is logisch, aangezien de linkeruitdrukking een integer is -- kolom b -- terwijl de rechteruitdrukking een array is van integer s, of integer[] , en dus is de vergelijking van de vorm integer =integer[] , die geen operator heeft, en daarom resulteert in de fout.

unnest het integer[] waarde maakt de linker- en rechterhanduitdrukkingen integer s, en dus kan de vergelijking doorgaan.

Aangepast SQL Fiddle .

Opmerking: dat hetzelfde gedrag wordt gezien bij het gebruik van IN in plaats van = ANY .



  1. java.lang.OutOfMemoryError:[geheugen uitgeput] tijdens het lezen van gegevens van Sqlite Android

  2. Hoe MySQL-foutcodes en berichten vastleggen met Laravel 5.2?

  3. Verschillende waarden selecteren in een samengevoegde tabel

  4. SQL-domein FOUT:kolom bestaat niet, standaardinstelling