2015-12-30 73 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

调整过的表名以及 –