Npgsql和NOT IN或!= ANY查询

时间:2016-12-02 16:20:58

标签: postgresql npgsql

似乎IN中没有对Npgsql子句的标准支持。我看到建议使用= ANY而不是IN的帖子。这非常适合替代标准IN子句。但是,Postgres(pgsql)似乎没有任何允许您执行NOT ANY!=ANY查询的内容。但是,它确实支持NOT IN,但Npgsql似乎没有。有人可以帮助我理解如何编写像这样的Npgsql兼容查询:

select * my_table where id NOT IN(1,2,3,4)

1 个答案:

答案 0 :(得分:1)

首先,这与Npgsql无关 - 这是一个PostgreSQL问题。

其次,PostgreSQL确实对IN子句有完全标准的支持。了解INANY之间的区别非常重要:IN进行操作,而ANY数组进行操作 - 两者肯定不一样,即使你可以将一个转换为另一个(例如见unnest)。 Read the docs carefully

最后,回答你的问题......说WHERE x != ANY(some_array)意味着“some_array的某些元素不等于x”。这确实与你想要的不一样,即“some_array的元素都不等于x”。您可以使用WHERE x != ALL(some_array)来实现后者:这会针对每个元素检查x,只有当所有元素都不相等时才返回true。

您还可以使用ANY进行简单的逻辑否定:WHERE NOT (x = ANY(SOME_ARRAY))