两张结构相同的表合并到一起的sql语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两张结构相同的表合并到一起的sql语句相关的知识,希望对你有一定的参考价值。

A、B两表结构相同,现要求将B表的数据加入到A表中,其中如果他们的主键不相同的,则直接添加,如果主键相同的,则要用B表中的数据替换掉A表中的数据。举例:
A表 (姓名、科目为联合主键)
张三 语文 50
李四 数学 60
B表
张三 语文 80
张三 数学 90
要求合并后:
A表
张三 语文 80
张三 数学 90
李四 数学 60

Try

INSERT INTO A
SELECT *
FROM B WHERE NOT EXISTS (SELECT 1 FROM A WHERE 姓名 = B.姓名 AND 科目 = B.科目)

UPDATE A t
SET score = (select score from B WHERE t.姓名 = B.姓名 AND 科目 = t.科目)追问

你这两句好像是分开才能执行的,而且第二句在access里面不能执行,第一句是合并A、B表,第二句是更新将A表的分数,我试了下,这句可以:
UPDATE A INNER JOIN B ON (A.姓名 = B.姓名) AND (A.科目 = B.科目) SET A.score = B.score;
怎么把他们合并到一起执行的啊?

追答

搞到一起access应该不支持,据我了解,目前应该只有oracle才能一句搞定

参考技术A 数据库更新操作其实就是删了以后再插入。
所以你可以这样做

首先删除A表中和B表相同的记录
delete from A where exists(select * from B where A.NAME = B.NAME and A.STRSUBJECT(科目) = B.STRSUBJECT)
把B表中的数据插入A表中
insert into A select * from B
参考技术B insert into B select * from A where name not in(select name from B);
把A表中主键与B表不重复的数据插入A表,跟你要的结果也是一样的,逻辑比你说的简单一点吧

mysql如何合并查询多个相同数据结构库的表输出来结果?

是这样的我数据有好多相同结构的表我想用sql语句合并输出指定的内容出来,就好像我的test表里面没有id=28,test2的表里面有id=28这个值,我用这条语句可以输出(看附件图片-百度)
但是如果我好多表那个`id` = "28"要写好多次,有没有简单快捷的方便高效的s'q'l语句不用重复输入`id` = "28"这个

直接先用union all合并所有的表,再包一层select语句,将合并表作为子表查询,加where条件即可,如果记录重复,可以加distinct关键字去重。追问

大神具体怎么写语句这不是很会写这个语句,帮我写下 谢谢

参考技术A 你图上怎么两个FROM后面都是test,应该有差异吧,是不是这样:
SELECT * FROM test1 WHERE id=28
UNION ALL
SELECT * FROM test2 WHERE id=28
UNION ALL
SELECT * FROM test3 WHERE id=28
这个是SQL是无法简化的,没有只写一次id=28的办法。一般这样把相同结构的数据分到不同的表是不推荐的,除非万不得已,例如一个月的数据放一个表里面,或者一个部门的数据放在一个表里面,都是不可取的,不一定提高多少效率,一定给编程带来许多麻烦。追问

是的 test1,test2,3这几个数据库结构是一样的里面数据不一样我就想用sql语句查询这三个数据库里面内容例如我想查id=28这样,test1没有就查test2,test3这样如果其中一个数据库有就输出内容,用这个语句UNION ALL 能不能只输一个id=28

追答

如果只输出一个就用UNION,不要后面的ALL,系统就能去重。但是查询语句的SQL无法省略,必须有多少个表就得写多少条件。

本回答被提问者和网友采纳

以上是关于两张结构相同的表合并到一起的sql语句的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL中 如何将两张结构完全一样的表合并?

sql语句,合并多条记录中的相同字段。

SQL 两张表合并 (两张表的列都相同)

SQL中如何将两个相同的表格组合成一个表格

怎样用Sql语句判断一张表中的两条数据相同

mysql如何合并查询多个相同数据结构库的表输出来结果?