sql >> Database >  >> RDS >> PostgreSQL

Een PostgreSQL-query met 'ANY' werkt niet

U wilt ALL . gebruiken , niet ANY . Uit de fijne handleiding:

9.21.3. ELKE/SOMMIGE (matrix)

expression operator ANY (array expression)

[...] De linkeruitdrukking wordt geëvalueerd en vergeleken met elk element van de array met behulp van de gegeven operator , wat een Booleaans resultaat moet opleveren. Het resultaat van ANY is "waar" als een waar resultaat wordt verkregen.

Dus als we dit zeggen:

1 != any(array[1,2])

dan worden we waar sinds (1 != 1) or (1 != 2) is waar. ANY is in wezen een OR exploitant. Bijvoorbeeld:

=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]);
 id 
----
  1
  2
  3
(3 rows)

Als we kijken naar ALL , we zien:

9.21.4. ALLE (matrix)

expression operator ALL (array expression)

[...] De linkeruitdrukking wordt geëvalueerd en vergeleken met elk element van de array met behulp van de gegeven operator , wat een Booleaans resultaat moet opleveren. Het resultaat van ALL is "waar" als alle vergelijkingen waar opleveren...

dus als we dit zeggen:

1 != all(array[1,2])

dan krijgen we false omdat (1 != 1) and (1 != 2) is onwaar en we zien dat ALL is in wezen een AND exploitant. Bijvoorbeeld:

=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]);
 id 
----
  3
(1 row)

Als u alle waarden in een array wilt uitsluiten, gebruikt u ALL :

select "Ticket_id"
from "Tickets"
where "Status" = 1
  and "Ticket_id" != all(array[1,2,3])
limit 6


  1. T-SQL Stuff-opdracht

  2. ListView Control Tutorial-02

  3. Een uitvoeringsplan genereren in SQL Server

  4. Hoe zich te ontdoen van MySQL-fout 'Voorbereide instructie moet opnieuw worden voorbereid'