使用具有多个JOIN的单个SELECT语句来检索多个一对多关系

时间:2014-03-24 04:14:08

标签: sql join one-to-many

建议使用带有多个JOIN的单个SELECT语句来检索多个一对多关系吗?似乎随着关系数量的增加,连接的结果将变得难以管理。

例如,假设我们有以下关系:

  • 学校有很多老师
  • 学校有很多学生
  • 学校有很多部门

假设我们想要检索id = 1的学校及其老师,学生和部门。这是使用单个SELECT语句的查询:

SELECT s.name  AS school, 
       t.name  AS teacher, 
       st.name AS student, 
       d.name  AS department 
FROM   schools s 
       LEFT OUTER JOIN teachers t 
                    ON s.id = t.SchoolId 
       LEFT OUTER JOIN students st 
                    ON s.id = st.SchoolId 
       LEFT OUTER JOIN departments d 
                    ON s.id = d.SchoolId 
WHERE  s.id = 1; 

假设这所学校有100名教师,1000名学生和10个部门。然后这个查询将返回一百万条记录(100 x 1000 x 10)!相反,如果我们做了3个单独的SELECT,我们将在100 + 1000 + 10 = 1110个记录中获得相同的信息。我只能想象单个SELECT非常慢。那么做一个SELECT有什么优势吗?这是一种已知的反模式吗?

1 个答案:

答案 0 :(得分:0)

您的“解决方案”没有获得相同的信息。它检索教师,部门和学生的单独列表,但不是哪个学生在哪个教师班级,而是与教师和部门类似。