使用交叉连接连接三个表

puruo6ea  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(513)

我有三张table:

  1. student: sub: marks:
  2. id | name id | sub stud_id | sub_id | marks
  3. ---+-------- ---+------------ --------+----------+------
  4. 1 | Peter 1 | English 1 | 1 | 80
  5. 2 | Alice 2 | Maths 1 | 2 | 70
  6. 3 | History 2 | 1 | 90
  7. 2 | 2 | 80

我需要做一个查询,返回以下内容:

  1. name | subjects | marks
  2. -------+-----------+----------------------------
  3. Peter | English | 80
  4. Peter | Maths | 70
  5. Peter | History | 0

这就是我所尝试的:

  1. select *
  2. from student s
  3. LEFT JOIN stud_marks m ON s.id = m.stud_id
  4. RIGHT JOIN subjects sub ON sub.id = m.sub_id

这让我

  1. name | marks | sub
  2. ------+--------+----------
  3. Peter | 80 | English
  4. Peter | 70 | Maths
  5. Alice | 90 | English
  6. Alice | 80 | Maths
  7. | | History

有什么想法吗?

hmae6n7t

hmae6n7t1#

你会把彼得和所有的替补都交出来。然后连接标记:

  1. select
  2. peter.name,
  3. sub.sub,
  4. coalesce(marks.marks, 0) as marks
  5. from (select * from student where id = 1) peter
  6. cross join sub
  7. left join marks on marks.stud_id = peter.id and marks.sub_id = sub.id
  8. order by sub.sub;

(实际上不需要在子查询中选择peter,但我认为它非常清楚我们在这里做什么。我们也可以交叉加入有分数的学生,把这个限制在where子句中的peter。)

相关问题