我目前被要求进行查询,如果它们不为空,则将从其他表中获取字段名称!
假设我们有这样的表格:
学生
ID | 姓名 | 年龄 |
---|---|---|
1 | 迈赫迪 | 22 |
1 | 阿米娜 | 26 |
数学
ID | 部分 |
---|---|
1 | 代数 |
2 | 分析 |
3 | 几何学 |
英语
ID | 部分 |
---|---|
1 | 语法 |
2 | 请讲 |
3 | 词汇 |
考试
idStudent | idMath | id英语 |
---|---|---|
1 | 1 | 空值 |
1 | 空值 | 2 |
2 | 1 | 空值 |
我们要查询使这个预期的结果:
考试
idStudent | 主题 |
---|---|
1 | 代数 |
1 | 请讲 |
2 | 代数 |
到目前为止我已经尝试过:
select idStudent,m.section Subject
from Exam exam, Student s, Math m, English eng
where s.id = exam.idStudent
and m.id=exam.idMath
and exam.idEnglish is null
union
select idStudent,eng.section Subject
from Exam exam, Student s, Math m, English eng
where s.id = exam.idStudent
and eng.id=exam.idEnglish
and exam.idMath is null
有没有更好的方法来做到这一点!
在此先感谢您的帮助。
数据库模型远非理想,因为它每门课程使用一张表;这意味着每次添加课程时,都需要创建一个新表。一个典型的模型将包括所有课程的单个表。
无论如何,在你的情况下,你可以这样做:
select e.idstudent, c.section from exam e join math c on c.id = e.idmath
union all
select e.idstudent, c.section from exam e join english c on c.id = e.idenglish
另外,请使用现代连接语法而不是 1980 年代的连接语法,因为它更易于阅读和调试。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句