2016-12-01 121 views
0

模式:如何申请自加入

学生(SNUM:整数,SNAME:CHAR(30),专业:CHAR(25),等级:CHAR(2)年龄:整数)

学院(fid:integer,fname:char(30),deptid:integer)

类(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”以外的各级 的学生等级和年龄。我知道我可以用简单的方式应用这个查询。但我想我们E JOINS

我尝试:

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'); 

这不是给我预期的答案。我是否犯了一些错误?

+0

你不想'join'?!! – wajeeh

+0

我想这样做JOINS –

+0

像这样'选择s.level,s.age从学生的s.level!='JR''? – wajeeh

回答

0

事实上,在这种情况下进行子查询或连接并没有任何意义,而您可以通过简单查询来获得它。

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

它应该给你想要的输出。

+0

“,”是“交叉连接”的替代拼写,它与所有“连接”运算符的绑定更紧密。 – philipxy

0

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

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