繁体   English   中英

当我使用select语句时,我的sql多次输出相同的数据

[英]my sql output the same data more than one time when i use select statement

我创建了三个表“ student”,“ course”和“讲师”,并将数据插入其中。 现在,我想通过选择检索一些数据。

这些是桌子

当我想显示时:Kumar拍摄的主题

SELECT STUDENT.NAME, COURSE.SUBJECT1, COURSE.SUBJECT2, COURSE.SUBJECT3
FROM  STUDENT,COURSE
WHERE  STUDENT.COURSE = COURSE.COURSE  = 'MLVK'

它重复数据不止一次。

我希望有人能帮助我

祝一切顺利

学习使用正确的,显式的, 标准的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM