首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我使用select语句时,sql多次输出相同的数据

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

Stack Overflow用户
提问于 2019-03-10 03:28:20
回答 3查看 70关注 0票数 0

我创建了三个表“学生”、“课程”和“讲师”,并向其中插入了数据。现在我想通过select来检索一些数据。

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

代码语言:javascript
复制
SELECT STUDENT.NAME, COURSE.SUBJECT1, COURSE.SUBJECT2, COURSE.SUBJECT3
FROM  STUDENT,COURSE
WHERE  STUDENT.COURSE = COURSE.COURSE  = 'MLVK'

它会将数据重复多次。

我希望有谁能帮助我

万事如意

EN

回答 3

Stack Overflow用户

发布于 2019-03-10 03:37:04

学习使用正确、明确、符合标准的 JOIN语法。

和,表别名:

代码语言:javascript
复制
SELECT s.NAME, c.SUBJECT1, c.SUBJECT2, c.SUBJECT3
FROM STUDENT s JOIN
     COURSE c
     ON s.COURSE = c.COURSE
WHERE c.COURSE  = 'MLVK'
票数 1
EN

Stack Overflow用户

发布于 2019-03-10 03:39:12

如果我要使用这些表格来选择Kumar拍摄的主题,我会这样写:

代码语言:javascript
复制
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

我认为这个版本比之前的答案(为course =‘MLVK’的任何学生选择主题)稍微更清楚一些(为特定学生选择主题,Kumar)。此答案还将返回Kumar的信息,即使他在“学生”表中没有课程值(注册前?)。

票数 0
EN

Stack Overflow用户

发布于 2019-03-10 03:51:47

首先,我建议在BCNF表单中对数据进行适当的建模,在BCNF表单中,您应该对另一个表进行建模,以持久化主题并映射选择该主题的讲师。

例如:(主题表)

代码语言:javascript
复制
SubjectId      LECT_ID
----------     ------------
TT234          L123
TT235          L003

而且,你的课程表当然会更多地映射到主题,比如:

代码语言:javascript
复制
CourseName     SubjectId
-------------  --------------
DTM            TT235
DTM            TT695
...

然后使用query:

代码语言:javascript
复制
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'

上面的查询将产生如下结果:

代码语言:javascript
复制
SubjectId    NAME
---------    ----------
PP563        Ahmad
SS003        Ahmad
PP999        John         

因为艾哈迈德恰好在DPG课程中教授两门课程。但是,如果您希望为Aminah报告不同的讲师,您可以将查询更改为:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55081142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档