34
SELECT "Ticket_id"  FROM "Tickets"
 WHERE "Status" = 1 AND ("Ticket_id" !=  ANY(array[1,2,3])) Limit 6

結果は 1,2,3,4,5,6

4

2 に答える 2

70

ALLではなく、を使用しますANY細かいマニュアルから:

9.21.3. ANY/SOME (配列)

expression operator ANY (array expression)

[...] 左側の式が評価され、指定されたoperatorを使用して配列の各要素と比較されます。これにより、ブール値の結果が得られる必要があります。ANY真の結果が得られた場合、 の結果は「真」です。

したがって、次のように言うと:

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. ALL (配列)

expression operator ALL (array expression)

[...] 左側の式が評価され、指定されたoperatorを使用して配列の各要素と比較されます。これにより、ブール値の結果が得られる必要があります。すべての比較が true の場合、 の結果ALLは「true」です...

したがって、次のように言うと:

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

次に、(1 != 1) and (1 != 2)is false であるため 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
于 2012-05-20T17:33:59.177 に答える
7

つまり:

"Ticked_id" NOT IN (1,2,3)
于 2012-05-20T14:00:20.200 に答える