我有两张桌子。一个表包含毕业记录,第二个表包含毕业后记录。候选人必须毕业,但不一定要毕业。
我的问题是,如果候选人有毕业后记录,则选择毕业后记录,否则只选择毕业。
表1分度表

rollno | degree | division
--------------------------
001    | B.tech | 1st
002    | B.sc   | 1st
003    | BA     | 1st

表2毕业后表
rollno | degree | division
--------------------------
002    | M.sc   | 1st

结果一定是
rollno | degree | division
--------------------------
001    | B.tech | 1st
002    | M.sc   | 1st
003    | BA     | 1st

最佳答案

您希望graduation_table中没有行的所有行加上postgraduation_table中的行。这可以用postgraduation_tablenot exists查询来表示:

select gt.rollno, gt.degree, gt.division
from graduation_table gt
where not exists (select *
                  from postgraduation_table pg
                  where pg.rollno = gt.rollno)

union all

select rollno, degree, division
from postgraduation_table
order by rollno;

在线示例:http://rextester.com/IFCQR67320

09-28 12:40