【发布时间】:2018-12-01 00:59:08
【问题描述】:
我有三张桌子:
student: sub: marks:
id | name id | sub stud_id | sub_id | marks
---+-------- ---+------------ --------+----------+------
1 | Peter 1 | English 1 | 1 | 80
2 | Alice 2 | Maths 1 | 2 | 70
3 | History 2 | 1 | 90
2 | 2 | 80
我需要做一个返回这个的查询:
name | subjects | marks
-------+-----------+----------------------------
Peter | English | 80
Peter | Maths | 70
Peter | History | 0
这是我尝试过的:
select *
from student s
LEFT JOIN stud_marks m ON s.id = m.stud_id
RIGHT JOIN subjects sub ON sub.id = m.sub_id
让我感动
姓名 |标记|子 ------+--------+---------- 彼得 | 80 |英语 彼得 | 70 |数学 爱丽丝 | 90 |英语 爱丽丝 | 80 |数学 | |历史有什么想法吗?
【问题讨论】:
-
您的预期结果是什么?
-
“我试过”和“得到奇怪的结果”是什么意思?期望的输出如何成为输入的函数? “任何想法”都不是适合 SO 的问题。请阅读How to Ask 和minimal reproducible example 并采取行动。另外:总是用谷歌搜索你的问题/问题/目标的许多清晰、简洁和特定的版本/措辞,有和没有你的特定字符串/名称,并阅读许多答案。将您发现的相关关键字添加到搜索中。如果您没有找到答案,请发布,使用一个变体搜索您的标题和关键字作为您的标签。 PS您的标题表明您可能需要将单独的聚合连接在一起。
-
总是发布你尝试过的和得到的输出
-
我尝试使用上面的表格来获得下面一张的输出。我用 SQL QUERY(select * from student s LEFT JOIN stud_marks m ON s.id = m.stud_id RIGHT JOIN subject sub ON sub.id = m.sub_id) 尝试了什么。但我得到了一些不想要的结果。
-
正如您在标题中所说:您需要交叉连接,而您的查询中没有。然后我建议永远不要使用右外连接。它们比左外连接更难阅读。我理解您查询背后的想法,但它的作用是让所有学生获得分数,然后您说您想要所有科目,即使该科目没有学生得分,这就是您得到的;一个额外的空白历史记录行。
标签: mysql join left-join inner-join right-join