sql比对两个表中的差异数据比较的sql语句

直接上图:
各位大神:我想以一个sq语句l实现以下结果,我用了left join right join 以及 full outer join全没实现啊,哪位大神有办法吗?小弟感激不尽啊…………急急急

select 
    base.name, base.year
    , a.成绩 as [a表成绩]
    , b.成绩 as [b表成绩]
    , case 
        when a.成绩 is null then 'a表中不存在'
        when b.成绩 is null then 'b表中不存在'
        when a.成绩=b.成绩 then '成功'
        else '差异' end as 比较结果
from (
    select name, year from tb_a
    union
    select name, year from tb_b
    ) as base
left join tb_a as a on a.name=base.name and a.year=base.year
left join tb_b as b on b.name=base.name and b.year=base.year

追问

大侠,它都报 base.name, base.year的列名无效啊

追答

"base" 是 "
(
select name, year from tb_a
union
select name, year from tb_b
)
"的别名

这里面是有name, year的 -- 除非你的数据库不支持,否则应该不会有这样的报错。

是Access?

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-14
select a.*,b.*, iif(b.name is null, '表b中不存在','成功')
from a left join b on a.name=b.name and a.year=b.year

union
select a.*,b.*, iif(a.name is null, '表a中不存在','成功')
from a right join b on a.name=b.name and a.year=b.year
以上表名及列名换成你自己的
第2个回答  2013-12-14
楼主,你好!跟你确认下,结果表的数据跟表A和表B的数据不一致,是不是弄反了?追问

你好,没有错这就是我想要的结果

追答

张三 2011年的成绩不在表A中,你看看

相似回答