Uitdrukking select array_agg(4)
retourneert een reeks rijen (eigenlijk een reeks rijen met 1 rij). Vandaar de vraag
select *
from b
where b.id = any (select array_agg(4)) -- ERROR
probeert een geheel getal (b.id) te vergelijken met een waarde van een rij (die 1 kolom van het type integer[] heeft). Het geeft een foutmelding.
Om dit op te lossen moet je een subquery gebruiken die gehele getallen retourneert (geen arrays van gehele getallen):
select *
from b
where b.id = any (select unnest(array_agg(4)))
Als alternatief kunt u de kolomnaam van het resultaat van select array_agg(4)
. plaatsen als een argument van any
, bijv.:
select *
from b
cross join (select array_agg(4)) agg(arr)
where b.id = any (arr)
of
with agg as (
select array_agg(4) as arr)
select *
from b
cross join agg
where b.id = any (arr)
Meer formeel gebruiken de eerste twee zoekopdrachten ANY
van het formulier:
expression operator ANY (subquery)
en de andere twee gebruiken
expression operator ANY (array expression)
zoals het wordt beschreven in de documentatie:9.22.4. ENIGE/SOMMIGE en 9.23.3. ELKE/SOMMIGE (matrix) .