如何在使用 MySQL 2 的 Rails 3 项目中使用 WHERE IN?
Posted
技术标签:
【中文标题】如何在使用 MySQL 2 的 Rails 3 项目中使用 WHERE IN?【英文标题】:How to use WHERE IN in Rails 3 project using MySQL 2? 【发布时间】:2013-03-20 10:19:09 【问题描述】:我对 Rails 很陌生,并且对 SQL 类型的语言有一点经验。
我正在使用 mysql2 进行 Rails 3 项目
我在这里有一个通用的 SQL 语句,我想在我们的两个数据库上工作。有没有办法只通过 ActiveRecord 功能来做到这一点?
SELECT * FROM MyRecords
WHERE (f1, f2, f3, f4) IN (
SELECT f1, f2, f3, f4
FROM MyRecords
GROUP BY f1, f2, f3, f4
HAVING count(*) = 1
);
换句话说,我正在尝试执行“WHERE IN”语句(坦率地说,我什至不知道 WHERE IN 语句的作用,只是这个答案可以满足我的需要:我如何(或者我可以)SELECT DISTINCT on multiple columns (postgresql)?)更具体地说,我必须扩充以下 ActiveRecord 函数,以便它执行上述查询:
def MyRecordFunction
MyRecords.where('org_id=?', self.org_id).order('f4')
end
谢谢。
【问题讨论】:
MySQL IN 子句只是一个包含 OR。 EG: WHERE this IN('1','2','3') 和做的一样。其中 this = '1' OR this = '2' OR this = '3' dev.mysql.com/doc/refman/5.0/en/… 【参考方案1】:我有点困惑,但我认为这就是你要找的:
MyRecord.where(org_id: [1, 2, 3]).order('f4')
where 中的 in 语句查找特定字段的特定值,在上面的示例中,查询将在 mY_records 表中查找 org_id 包含 1,2 或 3 的寄存器。
看看这个:http://guides.rubyonrails.org/active_record_querying.html
更新:我明白,Harish Shetty 有道理。
【讨论】:
【参考方案2】:试试这个:
MyRecord.joins("JOIN
(
SELECT f1, f2, f3, f4
FROM my_records
GROUP BY f1, f2, f3, f4
HAVING count(*) = 1
) a ON a.f1 = my_records.f1 AND
a.f2 = my_records.f2 AND
a.f3 = my_records.f3 AND
a.f4 = my_records.f4")
【讨论】:
以上是关于如何在使用 MySQL 2 的 Rails 3 项目中使用 WHERE IN?的主要内容,如果未能解决你的问题,请参考以下文章
如何使 Rails 3.1 在 Debian 挤压上与 MySQL Server 5.1 一起工作?
错误:无法构建 gem 本机扩展(rails 3.2.3 上的 mysql2)
Rails,Ransack:如何在 HABTM 关系中搜索“所有”匹配项而不是“任何”匹配项