2015-12-30 75 views
-1

表:學生抓取匹配與不匹配的記錄在Oracle

EmpId Name Course  Area  
-------------------------------- 
E001 John Maths  USA 
E001 John Maths  LONDON 
E001 John English LONDON 
E001 John English GERMANY 
E002 PETER Maths  USA 
E002 PETER Maths  LONDON 
E002 PETER English LONDON 
E002 PETER SCIENCE GERMANY 

表:主題

Course  Area 
-------------------- 
Maths  USA 
Maths  LONDON 
English GERMANY 
ACCOUNTS FRANCE 

我需要比較基礎課程和麪積這兩個表,我需要匹配的記錄還有STUDENTCOURSE表中的不匹配記錄。 感謝您的幫助和努力。

輸出示例:

E001 John Maths  USA 
E001 John Maths  LONDON 
E001 John English LONDON 
E001 John English GERMANY 
null null ACCOUNTS FRANCE 
E002 PETER Maths  USA 
E002 PETER Maths  LONDON 
E002 PETER English LONDON 
E002 PETER SCIENCE GERMANY 
null null ACCOUNTS FRANCE 

謝謝

+0

'我需要匹配的記錄也是不匹配記錄'你能提供樣本輸出嗎? –

+0

嗨,請檢查我的查詢,我已經讚揚我的要求輸出 – Rams

回答

0
-- students with matching areas 
select s.EmpId, s.name, a.course, a.area 
    from student s 
    inner join subject a 
    on (a.course = s.course and a.area = s.area) 
union all 
-- areas without matching students 
select s.EmpId, s.name, a.course, a.area 
    from subject a 
    left outer join student s 
    on (s.course = a.course and s.area = a.area) 
where s.EmpId is null; 

能否請您解釋一下,爲什麼你預計你的結果行

E002 PETER English LONDON 
E002 PETER SCIENCE GERMANY 

爲什麼你認爲這一行

null null ACCOUNTS FRANCE 

兩次?

+0

嗨,感謝您的查詢。我有另一個輸出場景(請檢查我的輸出)。你能否給我提供解決方案 – Rams

+0

嗨公羊,我調整了我的查詢。我不知道這個查詢的意義,但它在這裏。不符合某個地區的學生結果不再包括在內。 –

+0

調整過的表名以及 –