![](/img/trans.png)
[英]How can I return more than one row from an SQL select statement with average function?
[英]my sql output the same data more than one time when i use select statement
学习使用正确的,显式的, 标准的 JOIN
语法。
并且,表别名:
SELECT s.NAME, c.SUBJECT1, c.SUBJECT2, c.SUBJECT3
FROM STUDENT s JOIN
COURSE c
ON s.COURSE = c.COURSE
WHERE c.COURSE = 'MLVK'
如果我要使用这些表来选择库玛拍摄的主题,我会写类似以下内容:
SELECT
s.name, c.course, c.subject1, c.subject2, c.subject3
FROM
student as s
LEFT JOIN course as c on c.course = s.course
WHERE
s.no_matrik = '23456'
GROUP BY
s.name, c.course, c.subject1, c.subject2, c.subject3
我认为此版本的意图(先前针对某个学生的选择科目Kumar)比先前的答案(针对任何有课程=“ MLVK”的学生选择科目)更加清晰。 即使Kumar在Student表中没有课程价值,此答案也将返回有关Kumar的信息(预注册?)。
首先,我建议您以BCNF格式正确地对数据建模,在该模型中,您应该对另一个表进行建模以保留主题并映射采用该主题的讲师。
例如:(主题表)
SubjectId LECT_ID
---------- ------------
TT234 L123
TT235 L003
而且,您的“课程表”当然更适合主题映射,例如:
CourseName SubjectId
------------- --------------
DTM TT235
DTM TT695
...
然后您将查询用作:
Select sub.SubjectId, l.NAME
From
Student s JOIN
Course c
on c.CourseName = s.COURSE
JOIN Subject sub
on sub.SubjectId = c.SubjectId
JOIN Lecturer l
on l.LECT_ID = sub.Lecturer
Where s.NAME = 'Aminah'
上面的查询将结果为:
SubjectId NAME
--------- ----------
PP563 Ahmad
SS003 Ahmad
PP999 John
因为艾哈迈德(Ahmad)刚在DPG课程中教授2门科目。 但是,如果您希望报告Aminah的不同讲师,则可以将查询更改为:
SELECT NAME FROM Lecturer where LECT_ID
in (
Select l.LET_ID
From
Student s JOIN
Course c
on c.CourseName = s.COURSE
JOIN Subject sub
on sub.SubjectId = c.SubjectId
JOIN Lecturer l
on l.LECT_ID = sub.LECT_ID
Where s.NAME = 'Aminah'
) a
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.