如何申请自我加入

时间:2016-12-01 04:51:32

标签: mysql join self-join

架构:

学生(snum:整数,sname:char(30),major:char(25),level:char(2),age:integer)

Faculty(fid:integer,fname:char(30),deptid:integer)

Class(cname:char(40),meets_at:char(20),room:char(10),fid:integer | fid REFS Faculty.fid)

已注册(snum:integer,cname:char(40)| snum REFS student.snum,cname REFS class.name)

我想打印各级学生的水平和年龄 除了'JR'。我知道我可以用一种简单的方式应用这个查询。但是我想要联系我们

我的尝试:

select s.levels as Seniority,s.age as Age

from student s

where s.levels not in (

select a.levels

from student a

where a.levels='JR');

这不是给我预期的答案。我做错了吗?

2 个答案:

答案 0 :(得分:0)

实际上,在这种情况下进行子查询或连接没有任何意义,只要您可以通过简单的查询来获取它。

SELECT level as Seniority, age as Age from student WHERE levels != 'JR'

它应该给你想要的输出。

答案 1 :(得分:0)

虽然我同意join可能有点矫枉过正,但这看起来像是家庭作业,在这种情况下,您可能会被要求专门使用join。这是我的尝试:

select distinct levels as Seniority, age as Age
  from student
       natural join
       ( select *
           from student a
          where a.levels != 'JR' );