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

直接上图:各位大神:我想以一个sq语句l实现以下结果,我用了leftjoinrightjoin以及fullouterjoin全没实现啊,哪位大神有办法吗?小弟感激不尽啊…... 直接上图:
各位大神:我想以一个sq语句l实现以下结果,我用了left join right join 以及 full outer join全没实现啊,哪位大神有办法吗?小弟感激不尽啊…………急急急
展开
 我来答
tim_spac
推荐于2017-09-07 · TA获得超过3628个赞
知道大有可为答主
回答量:1804
采纳率:100%
帮助的人:1995万
展开全部
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?
小狂中E
2013-12-14 · TA获得超过1418个赞
知道大有可为答主
回答量:1514
采纳率:66%
帮助的人:1014万
展开全部
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
以上表名及列名换成你自己的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
weidongzzz
2013-12-14 · TA获得超过1430个赞
知道小有建树答主
回答量:869
采纳率:25%
帮助的人:628万
展开全部
楼主,你好!跟你确认下,结果表的数据跟表A和表B的数据不一致,是不是弄反了?
追问
你好,没有错这就是我想要的结果
追答
张三 2011年的成绩不在表A中,你看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式