【问题标题】:How to use WHERE IN in Rails 3 project using MySQL 2?如何在使用 MySQL 2 的 Rails 3 项目中使用 WHERE IN?
【发布时间】: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 ruby-on-rails activerecord where-in


【解决方案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")
    

    【讨论】:

      猜你喜欢
      • 2021-01-28
      • 2013-03-20
      • 2012-10-16
      • 2020-04-18
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多