用sql语句显示A,B两个表的结果,A,B结构一样,用姓名和日期关联,显示结

用sql语句显示A,B两个表的结果,A,B结构一样,用姓名和日期关联,显示结果中要求B表中姓名和日期与A表一致的显示B表内容,否则显示A表内容。我写了一个但是只能显示出来... 用sql语句显示A,B两个表的结果,A,B结构一样,用姓名和日期关联,显示结果中要求B表中姓名和日期与A表一致的显示B表内容,否则显示A表内容。我写了一个但是只能显示出来A,B表不一样的内容,请大神指点。 展开
 我来答
badkano
2017-08-28 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144775 获赞数:885380
团长

向TA提问 私信TA
展开全部

创建测试表:

create table a
(姓名 varchar(10),
日期 varchar(10),
其他 varchar(10))

create table b
(姓名 varchar(10),
日期 varchar(10),
其他 varchar(10))

insert into a values ('张三','2017-01-01',1)
insert into a values ('李四','2017-02-01',2)

insert into b values ('张三','2017-01-01',3)
insert into b values ('王五','2017-03-01',4)

这样的话最后显示数据应该是b表里张三那条还有a表里李四那条。

运行语句:

select b.* from a,b where a.姓名=b.姓名 and a.日期=b.日期 and b.姓名 is not null
union all
select a.* from a where not exists (select 1 from b where a.姓名=b.姓名 and a.日期=b.日期 and b.姓名 is not null)

结果:

更多追问追答
追问
我按照你的方法试了一下,结果出来的a表中如果符合姓名和日期都跟b表中的一样的数据超过一条,结果中都会显示,能不能控制只显示一条呢?请赐答。
追答

union all改成union再执行语句运行一下

select b.* from a,b where a.姓名=b.姓名 and a.日期=b.日期 and b.姓名 is not null
union
select a.* from a where not exists (select 1 from b where a.姓名=b.姓名 and a.日期=b.日期 and b.姓名 is not null)
tj_angela
2017-08-28 · TA获得超过7530个赞
知道大有可为答主
回答量:6797
采纳率:75%
帮助的人:2671万
展开全部
把你select *的每个字段换成 isnull(b.col,a.col)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式