似乎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)
答案 0 :(得分:1)
首先,这与Npgsql无关 - 这是一个PostgreSQL问题。
其次,PostgreSQL确实对IN
子句有完全标准的支持。了解IN
和ANY
之间的区别非常重要: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))
。