我很难将此SQL查询转换为ActivereCord。这是我的SQL。
SELECT distinct stc_term_gpa,
user_id,
lesley_id,
first,
last,
FROM lesley_grades
ORDER BY user_id
这返回437行 - 我想要。我没有问题在SQL
中运行。但是,当我尝试在控制台的导轨中运行它时:
LesleyGrade.select(:stc_term_gpa, :user_id, :lesley_id, :first, :last).distinct.order(:user_id)
我验证了Rails中的计数
LesleyGrade.select(:stc_term_gpa, :user_id, :lesley_id, :first, :last).distinct.order(:user_id).count(:all)
我返回1440行 - 这不是我想要的...这是我的DB中的所有数据行。
发生了什么事?
update
这很奇怪:
当我在Rails Console中运行Active Record查询并获得Count 1440
LesleyGrade.select(:stc_term_gpa, :user_id, :lesley_id, :first, :last).distinct.order(:user_id).count(:all)
我检查控制台中的SQL(ActivereCord生产的SQL),这就是它产生的:
SELECT DISTINCT
"lesley_grades"."stc_term_gpa",
"lesley_grades"."user_id",
"lesley_grades"."lesley_id",
"lesley_grades"."first",
"lesley_grades"."last"
FROM "lesley_grades"
ORDER BY "lesley_grades"."user_id" ASC
当我在SQL客户端中运行上述SQL时,我会得到437行。再次差异。
但是,当我使用Rails生产的SQL玩耍时,请在我的标准中使用Lesley_grades。,我得到1440行(即使我将ID放置在那里,也应该得到437吗?)
SELECT DISTINCT
"lesley_grades"."stc_term_gpa",
**"lesley_grades"."id"**,
"lesley_grades"."user_id",
"lesley_grades"."lesley_id",
"lesley_grades"."first",
"lesley_grades"."last"
FROM "lesley_grades"
ORDER BY "lesley_grades"."user_id" ASC
所以我想问题是ActivereCord是否有些偷偷地使用ID来使用ID,这就是为什么我收到1440的原因?我如何获得我独特的437行?
您仍然可以使用find_by_sql metod
query = "SELECT distinct stc_term_gpa, user_id,lesley_id,first,last
FROM lesley_grades
ORDER BY user_id"
expectedResult = LesleyGrade.find_by_sql(query)