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

PostgreSQL dotaz s 'ANY' nefunguje

Chcete použít ALL , nikoli ANY . Z jemného manuálu:

21.9.3. JAKÉKOLI/NĚKTERÉ (pole)

expression operator ANY (array expression)

[...] Levý výraz je vyhodnocen a porovnán s každým prvkem pole pomocí daného operátoru , což musí poskytnout booleovský výsledek. Výsledek ANY je "true", pokud je získán jakýkoli pravdivý výsledek.

Takže když řekneme toto:

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

pak dostaneme true, protože (1 != 1) or (1 != 2) je pravda. ANY je v podstatě OR operátor. Například:

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

Pokud se podíváme na ALL , vidíme:

21.9.4. VŠECHNY (pole)

expression operator ALL (array expression)

[...] Levý výraz je vyhodnocen a porovnán s každým prvkem pole pomocí daného operátoru , což musí poskytnout booleovský výsledek. Výsledek ALL je "pravda", pokud všechna srovnání dávají hodnotu true...

takže když řekneme toto:

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

pak dostaneme false, protože (1 != 1) and (1 != 2) je nepravda a vidíme, že ALL je v podstatě AND operátor. Například:

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

Pokud chcete vyloučit všechny hodnoty v poli, použijte ALL :

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


  1. Oracle – Jak vytvořit materializovaný pohled pomocí FAST REFRESH a JOINS

  2. Zmírnění fragmentace indexu

  3. Hodnota dat v čase

  4. Autoincrement PostgreSQL