首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sql自联接问题--如何从同一表中查找重复项

sql自联接问题--如何从同一表中查找重复项
EN

Stack Overflow用户
提问于 2014-02-03 11:38:27
回答 2查看 247关注 0票数 1

我是学生

我有这样的桌子结构

代码语言:javascript
运行
复制
student (sid, sname, gender, age, year, gpa)

代码语言:javascript
运行
复制
dept(dname, numphds)

代码语言:javascript
运行
复制
course(cno, cname, dname)

代码语言:javascript
运行
复制
enroll(sid, grade, dname, cno, sectno)

我想知道结果.

Q-列印同时修读“电脑科学”课程及“数学”课程的学生姓名.

我尝试过以下查询,但它不能给我吞吐量.

代码语言:javascript
运行
复制
select e.sid, s.sname  from 
    enroll e ,enroll e1 ,student s ,course c 
    where s.sid=e.sid, 
         e.cno =c.cno 
      and e.sid=e1.sid 
    and c.cname='computer science' and c.name='maths';
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-03 11:54:10

在SQL中引入适当的联接已经有20多年了。FFS使用它们!

试试这个:

代码语言:javascript
运行
复制
select s.sid, s.sname
from student s
join enroll e on e.sid = s.sid
join course c on c.cno = e.cno and c.cname='computer science'
join enroll e1 on e1.sid = s.sid
join course c1 on c1.cno = e1.cno and c1.name='maths'

请注意如何将非键条件置于联接条件中。尽管如果课程名称在where子句中,查询仍然可以工作,但是在join子句中添加条件会使它们应用的位置更加明显,从而提高可读性。

通过正确地格式化和对表进行合理的排序,您实际上可以读取查询并(希望)理解它。

票数 1
EN

Stack Overflow用户

发布于 2014-02-03 11:57:30

使用以下代码

代码语言:javascript
运行
复制
select e.said, s.sname from enroll e inner join 
enrool e1 on e1.sid = e.sid inner join
student s on s.sid = e.sid inner join
course c on c.cno = e.cno
where c.cname = 'computer science' and c.name = 'maths'

如果您需要使用左联接,那么请使用

代码语言:javascript
运行
复制
    select e.said, s.sname from enroll e left join 
enrool e1 on e1.sid = e.sid left join
student s on s.sid = e.sid left join
course c on c.cno = e.cno
where c.cname = 'computer science' and c.name = 'maths'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21526412

复制
相关文章

相似问题

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