sql >> Database teknologi >  >> RDS >> PostgreSQL

Operator findes ikke:heltal =heltal[] i en forespørgsel med ANY

Baseret på fejlmeddelelsesdelen operator does not exist: integer = integer[] , ser det ud til, at bs kolonne skal være unnest ed, for at få højre side tilbage til et integer så sammenligningsoperatoren kan findes:

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

Dette resulterer i outputtet:

A
2
3

Givet dokumentet for ENHVER funktion :

... fejlen giver mening, da det venstre udtryk er et integer -- kolonne b -- mens det højre udtryk er en matrix af integer s, eller integer[] , og så ender sammenligningen med at have formen integer =integer[] , som ikke har en operator, og derfor resulterer i fejlen.

unnest ved at bruge integer[] værdi gør venstre- og højrehåndsudtrykkene til integer s, og så kan sammenligningen fortsætte.

Ændret SQL Fiddle .

Bemærk: at den samme adfærd ses ved brug af IN i stedet for = ANY .



  1. laravel tilhører Mange Filter

  2. Gem data i aktivitetens onDestroy-metode

  3. MySQL CREATE FUNCTION Syntaks

  4. C# og MySQL .NET Connector - Enhver måde at forhindre SQL Injection-angreb på i en generisk klasse?