我想使用活动记录生成以下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)
我已经为子查询编写了一个范围
提前致谢。
答案 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")