Ruby on rails 在带有RoR和ActiveRecord的where中使用多个列名
我想使用活动记录生成以下sqlRuby on rails 在带有RoR和ActiveRecord的where中使用多个列名,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我想使用活动记录生成以下sql WHERE (column_name1, column_name1) IN (SELECT ....) 我不知道如何做这是活动记录 WHERE (column_name1, column_name1) IN (SELECT ....) 到目前为止我已经试过了 where('column_name1, column_name2' => {}) where([:column_name1, :column_name2] => {}) 这是我要创建的完整
WHERE (column_name1, column_name1) IN (SELECT ....)
我不知道如何做这是活动记录
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)
我已经为子查询编写了一个范围
提前感谢。选择中的列\u name1、列\u name1。。。。不是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)
所以我决定使用内部连接来获得相同的功能。这是我的解决办法
select(:column1, 'Count(1)').
joins("INNER JOIN (#{subquery.to_sql}) AS table2 ON
table1.column1=table2.column1
AND table1.column2=table2.column2")
您能写出您想要创建的完整语句吗?编辑原始答案以包含完整语句,其中列\名称1,列\名称1位于SELECT。。。。是有效的,这与使用两列进行内部联接相同。我在解决方案中添加了一个答案