繁体   English   中英

Rails SQL 查询,将 id 数组传递给 sql WHERE…IN 子句

[英]Rails SQL query, passing array of ids to sql WHERE…IN clause

处理 HABTM 关系并需要编写我可以通过ActiveRecord::Base.connection.execute(my_query)运行的 sql 查询字符串

SQL WHERE...IN 子句需要一个整数 id 数组,如下所示: "DELETE from contacts_tags where tag_id = 99 AND contact_id IN (1, 2, 3, 4)

我有一个要传递到 IN 子句中的 id 数组,但似乎无法以 SQL 接受的方式对其进行格式化。

ids_for_delete = [1, 2, 3, 4]
my_query = "DELETE from contacts_tags where tag_id = 99 AND contact_id IN (#{ids_for_delete})"
ActiveRecord::Base.connection.execute(my_query) 
    #=> There is an error in your SQL syntax.

将 id 数组传递给 SQL WHERE 子句的正确方法是什么?

尝试:

my_query = "DELETE from contacts_tags where tag_id = 99 AND contact_id IN (#{ids_for_delete.join(', ')})"

使用方法 join 生成像 "1, 2, 3, 4.." 这样的字符串

您还可以对数组值使用 ANY 操作:

DELETE FROM contacts_tags WHERE tag_id = 99 AND contact_id = ANY('{ #{ids_for_delete.join(",")} }'::int[])

即使您传递一个空数组,它也不会中断。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM