[英]Why is my Active Record Query returning different results than my raw SQL
[英]Raw sql query and query writting using active record query are giving different results
我正在运行两个查询,在第一个中,我运行原始sql查询:
SELECT drivers.*, shift_timing.* FROM "drivers"
LEFT JOIN(SELECT DISTINCT ON (driver_id) driver_id,
start_hour, start_minutes, end_hour, end_minutes FROM
shift_timings ORDER BY driver_id) AS shift_timing ON
drivers.id = shift_timing.driver_id WHERE
"drivers"."deleted_at" IS NULL ORDER BY "drivers"."id" ASC LIMIT 1
这给了我以下输出:
{"id"=>"1", "driver_name"=>"Narendra Kumar Soni", ...,
"last_order_id"=>"31550", "last_shift_id"=>"74483", "driver_id"=>"1",
"start_hour"=>"7", "start_minutes"=>"0", "end_hour"=>"19",
"end_minutes"=>"0"}
但是当我运行以下查询时,它将完全转换为原始sql查询:
Driver.joins('LEFT JOIN(SELECT DISTINCT ON (driver_id) driver_id,
start_hour, start_minutes, end_hour, end_minutes FROM
shift_timings ORDER BY driver_id)
AS shift_timing ON drivers.id =
shift_timing.driver_id')
.select('drivers.*, shift_timing.*').first
我得到以下结果:
#<Driver id: 1, driver_name: "Narendra Kumar Soni", ...,
, last_order_id: 31550, last_shift_id: 74483>
基本上,活动记录查询结果中缺少start_hour,start_minutes,end_hour,end_minutes列,而缺少的列实际上是排班计时表的列。 有人可以解释为什么会这样吗?如何解决?
通常可以使用['name']
语法访问联接表中['name']
,因此外观类似于driver['start_hour']
。
但是我认为解决该问题的正确方法只是包括shift_timings
表,例如
Driver.includes(:shift_timings)
。
要么删除select
子句,以获得完整的ActiveRecord对象和用途includes(:shift_timings)
替代,或者用pluck
只得到你想要作为一个数组的字段:
Driver.joins('LEFT JOIN ...') # As in the question
.pluck('drivers.driver_name, shift_timings.start_hour, shift_timings.start_minutes')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.