2016-12-01 73 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');