【问题标题】:How to rewrite this ActiveRecord query to MySQL?如何将此 ActiveRecord 查询重写为 MySQL?
【发布时间】:2016-08-15 13:23:33
【问题描述】:

我从 Rails 代码中得到这个查询:

cars = Car.where('cars.status = 0 AND cars.new = 0')
cars.each do |car|
  SharedCar.create(car_id: car.id, owner_id:  OWNER_ID)
end  

我需要将此查询直接运行到 MySQL 控制台。如何创建一个和上面的 ActiveRecord 一样的 MySQL?

编辑:重点显然是如何组合第一个和第二个查询,而不是如何在 MySQL 中加载第一个查询。

谢谢。

【问题讨论】:

    标签: mysql sql ruby-on-rails ruby activerecord


    【解决方案1】:

    to_sql方法:

    Car.where('cars.status = 0 AND cars.new = 0').to_sql
    # => SELECT * FROM cars WHERE status = 0 AND new = 0;
    

    结果插入查询将是

    INSERT shared_cars (car_id, owner_id)
        SELECT cars.car_id, <owner_id>
        FROM cars WHERE cars.status = 0 AND cars.new = 0
    

    【讨论】:

    • 使用to_sql 相信你也可以使用to_sql把create方法转成sql。
    【解决方案2】:
    SELECT * FROM cars WHERE status = 0 AND new = 0;
    

    【讨论】:

      【解决方案3】:

      我会在没有任何 Ruby 的情况下用 SQL 编写类似的东西:

      INSERT INTO shared_cars (car_id, owner_id) 
        SELECT DISTINCT id, <owner_id> FROM cars WHERE status = 0 AND new = 0;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-29
        • 2011-09-10
        • 1970-01-01
        • 2020-07-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多