在RoR和ActiveRecord的位置使用多个列名

时间:2015-03-29 16:38:17

标签: ruby-on-rails activerecord

我想使用活动记录生成以下sql。

WHERE (column_name1, column_name1) IN (SELECT ....)

我不知道怎么做这是活跃的记录。

到目前为止我已尝试过这些

where('column_name1, column_name2' => {})
where([:column_name1, :column_name2] => {})

这是我要创建的完整查询

SELECT a, Count(1) 
            FROM   table 
            WHERE  ( a, b ) IN (SELECT a, 
                                    Max(b) 
                                    FROM   table 
                                    GROUP  BY a) 
            GROUP  BY a 
            HAVING Count(1) > 1)

我已经为子查询编写了一个范围

提前致谢。

2 个答案:

答案 0 :(得分:0)

WHERE (column_name1, column_name1) IN (SELECT ....)不是sql中的有效构造;因此无法在活动记录中完成。

在SQL中完成相同的有效方法是:

WHERE column_name1 IN (select ....) OR column_name2 IN (select ...)

可以在活动记录中直接使用相同的查询:

where("column_name1 IN (select ...) OR column_name2 IN (select...)")

避免重复:

selected_values = select ...
where("column_name IN ? OR column_name2 in ?", selected_values, selected_values)

答案 1 :(得分:0)

所以我决定使用内连接来获得相同的功能。这是我的解决方案。

  select(:column1, 'Count(1)').
  joins("INNER JOIN (#{subquery.to_sql}) AS table2 ON   
  table1.column1=table2.column1
  AND table1.column2=table2.column2")