sql >> Databáze >  >> RDS >> PostgreSQL

Operátor neexistuje:integer =integer[] v dotazu s ANY

Na základě části chybové zprávy operator does not exist: integer = integer[] , zdá se, že bs sloupec musí být unnest ed, abyste dostali pravou stranu zpět na integer takže operátor porovnání lze najít:

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

Výsledkem je výstup:

A
2
3

Vzhledem k dokumentu pro jakékoli funkce :

... chyba dává smysl, protože levý výraz je integer -- sloupec b -- zatímco výraz vpravo je pole integer s nebo integer[] , a tak srovnání skončí ve tvaru integer =integer[] , který nemá operátor, a proto vede k chybě.

unnest ing the integer[] value dělá levý a pravý výraz integer s, a tak může srovnání pokračovat.

Upravené SQL Fiddle .

Poznámka: že stejné chování je vidět při použití IN místo = ANY .



  1. Jak mohu vložit skutečný čas události do databáze pomocí php mysqli?

  2. hledání dvojice hodnot řetězce v objektu json pomocí mysql

  3. Proč MySQL s FORMAT ignoruje ORDER?

  4. Zkontrolujte, zda je řetězec znaků platné nebo neplatné datum