【问题标题】:Rails SQL query, passing array of ids to sql WHERE...IN clauseRails SQL 查询,将 id 数组传递给 sql WHERE...IN 子句
【发布时间】:2016-04-19 00:03:35
【问题描述】:

处理一个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 子句的正确方法是什么?

【问题讨论】:

    标签: mysql ruby-on-rails


    【解决方案1】:

    试试:

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

    使用join方法生成字符串,如“1, 2, 3, 4..”

    【讨论】:

    • 谢谢!我一定是想多了。
    • ids_for_delete 为空时,它将中断
    • @rony36 你需要先检测数组,在使用这个快递之前确保它不是空白的。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-08
      • 2018-07-17
      • 2018-06-22
      • 2018-06-18
      • 2021-05-17
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      相关资源
      最近更新 更多