美文网首页
Rails连表查询(join)

Rails连表查询(join)

作者: hjiangwen | 来源:发表于2017-07-05 23:59 被阅读111次

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

    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)

          本文链接:https://www.haomeiwen.com/subject/fpechxtx.html