PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zapytanie PostgreSQL z 'ANY' nie działa

Chcesz użyć ALL , a nie ANY . Z dobrego podręcznika:

9.21.3. DOWOLNE/NIEKTÓRE (tablica)

expression operator ANY (array expression)

[...] Wyrażenie po lewej stronie jest oceniane i porównywane z każdym elementem tablicy przy użyciu podanego operatora , co musi dać wynik logiczny. Wynik ANY jest „prawdziwe”, jeśli uzyskano jakikolwiek prawdziwy wynik.

Więc jeśli tak powiemy:

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

wtedy otrzymamy prawdę, ponieważ (1 != 1) or (1 != 2) jest prawdziwy. ANY jest zasadniczo OR operator. Na przykład:

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

Jeśli spojrzymy na ALL , widzimy:

9.21.4. WSZYSTKIE (tablica)

expression operator ALL (array expression)

[...] Wyrażenie po lewej stronie jest oceniane i porównywane z każdym elementem tablicy przy użyciu podanego operatora , co musi dać wynik logiczny. Wynik ALL jest "prawda", jeśli wszystkie porównania dają prawdę...

więc jeśli tak powiemy:

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

wtedy otrzymamy fałsz, ponieważ (1 != 1) and (1 != 2) jest fałszywe i widzimy, że ALL jest zasadniczo AND operator. Na przykład:

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

Jeśli chcesz wykluczyć wszystkie wartości z tablicy, użyj ALL :

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmień typ danych kolumny na serial

  2. foreach %dopar% + RPostgreSQL

  3. Zmień język systemu i komunikatów o błędach w PostgreSQL

  4. Najważniejsze rzeczy do monitorowania w PostgreSQL — analiza obciążenia

  5. org.hibernate.internal.util.config.ConfigurationException:nie można zlokalizować zasobu cfg.xml [/HibernateTest/src/hibernate.cfg.xml]