PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL заявка с 'ANY' не работи

Искате да използвате ALL , а не ANY . От финото ръководство:

9.21.3. ВСЯКАКВА/НЯКОЙ (масив)

expression operator ANY (array expression)

[...] Изразът отляво се оценява и сравнява с всеки елемент от масива с помощта на даден оператор , което трябва да даде булев резултат. Резултатът от ANY е "true", ако се получи някакъв верен резултат.

Така че, ако кажем това:

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

тогава ще получим истина, тъй като (1 != 1) or (1 != 2) истина е. ANY по същество е OR оператор. Например:

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

Ако погледнем ALL , виждаме:

9.21.4. ВСИЧКИ (масив)

expression operator ALL (array expression)

[...] Изразът отляво се оценява и сравнява с всеки елемент от масива с помощта на даден оператор , което трябва да даде булев резултат. Резултатът от ALL е "вярно", ако всички сравнения дават истина...

така че ако кажем това:

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

тогава ще получим false, тъй като (1 != 1) and (1 != 2) е false и виждаме, че ALL по същество е AND оператор. Например:

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

Ако искате да изключите всички стойности в масив, използвайте 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. [Видео] Ansible и PostgreSQL

  2. Как да избегнем повтарящи се тригерни повиквания в PostgreSQL 9.2.1

  3. Django cache.set() причинява грешка при дублиран ключ

  4. SQL заявка за получаване на всички стойности, които едно изброяване може да има

  5. Копирайте таблица (включително индекси) в postgres