我曾经在Rails中使用过类似的查询:
MyModel.where(id: ids)
生成的 SQL 查询类似于:
SELECT "my_models".* FROM "my_models"
WHERE "my_models"."id" IN (1, 28, 7, 8, 12)
现在我想要将这个使用IN
改为使用ANY
。我创建了这个:
现在我希望使用ANY
代替IN
,我创建了以下代码:
MyModel.where("id = ANY(VALUES(#{ids.join '),('}))"
现在当我使用空数组 ids = []
时,我会得到以下错误:
MyModel Load (53.0ms) SELECT "my_models".* FROM "my_models" WHERE (id = ANY(VALUES()))
ActiveRecord::JDBCError: org.postgresql.util.PSQLException: ERROR: syntax error at or near ")"
ActiveRecord::StatementInvalid: ActiveRecord::JDBCError: org.postgresql.util.PSQLException: ERROR: syntax error at or near ")"
Position: 75: SELECT "social_messages".* FROM "social_messages" WHERE (id = ANY(VALUES()))
from arjdbc/jdbc/RubyJdbcConnection.java:838:in `execute_query'
VALUES(?)
,并根据需要扩展绑定数组比您在此处拥有的更好。您需要小心地正确转义任何注入到SQL中的原始值。这个查询的目的是什么? - tadmanIN
不是= ANY
的别名。我提供了详细信息。 - Erwin BrandstetterIN
在内部被重写为= ANY
。我在我的答案中添加了详细信息。 - Erwin Brandstetter