Rails连表查询(join)

今天遇到的两个需求,要用到连表查询:

  1. 有2个表,users表和offices表。他们关系是user belongs to office, office has many users,现在要将用户按照职位等级排序。由于排序的列不在users表中,不能直接用User.order('level ASC'),得用到连表查询。
User.joins(:office).order('offices.level ASC')
                                        #
# 下面是生成的sql语句
SELECT "users".* 
FROM "users" 
INNER JOIN "offices" 
ON "offices"."id" = "users"."office_id"  
ORDER BY offices.level
  1. 有2个表,examsquestions,他们之间的关系是exam has one question, question belongs to exam。(表比较奇怪,考试只有一道题)。现在要列出所有没有question的exam。
    跟上一个问题一样,查询时要依赖另一个表的列,所以得用连表查询。
Exam.joins("LEFT JOIN questions ON questions.exam_id = exams.id")
.where("questions.id IS null")           
                                        #
# 下面是生成的sql语句
SELECT "exams".* 
FROM "exams" 
LEFT JOIN questions 
ON questions.exam_id = exam.id 
WHERE (questions.id IS null)

这里用到的是Left join,第一个问题用到的是Inner Join,有啥不同可以看这篇文章用图形来解释sql的join查询。
下次遇到查询数据库的问题,先查该使用哪个sql查询语句,再查rails中如何实现这个sql查询。

你可能感兴趣的:(Rails连表查询(join))