问题的描述如下:给定数据库中的两列,每个列内的所有记录可以视为一个集合,如何求这两个集合的交集,差集等。示例:
table1中字段firstname
- tom
- kevin
- john
- steven
- marry
- anthony
|
table2中字段username
- jack
- tom
- william
- tom
- marry
- Thomas
|
两个列的交集是tom, marry。解决的方法是采用union和group by:
SELECT name
FROM (SELECT firstnameas name FROM table1 union SELECT usernameas name FROM table2) as alltable
group by name having count(*) > 1;
两个列的交集的补集:
SELECT name
FROM (SELECT firstnameas name FROM table1union SELECT usernameas name FROM table2) as alltable
group bynamehavingcount(*) = 1;
第一个列和第二个列的差集:
SELECT * FROM table1
WHERE firstname not in
(SELECT name
FROM (SELECT firstnameas name FROM table1union SELECT usernameas name FROM table2) as alltable
group bynamehavingcount(*) > 1)
类似的可以求第二个列和第一个列的差集。如果一个集合是另一个集合的子集,情况会简单一点。如果希望包含重复的记录,使用union all.
大家可以自己考虑一下。当然这个肯定不是唯一的解决方法了,就算抛砖引玉了。
关于union,可以参考http://www.w3schools.com/sql/sql_union.asp
参考:http://www.mysqltutorial.org/compare-two-tables-to-find-unmatched-records-mysql.aspx
分享到:
相关推荐
1.表中有id和name 两个字段,查询出name重复的所有数据 select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1) 2、查询出所有数据进行分组之后,和重复数据...
一个表就是一个关系,表实质上就是行列的集合,每一行代表一条记录,每一列代表记录的一个字段。每个表由若干行组成,表的第一行为各列标题,其余行都是数据。在表中,行的顺序可以任意。不同的表有不同的名字。 表...
MySql的用户管理是通过User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...
在这次MySQL的实战中,我的数据库已经做了4个分片,分布在不同的4台机器上,每台机器上的数据量有1.7亿(1.7*4=6.8亿),占用空间260G(260*4=1040G),这次迁移的目的就是删除掉一些历史记录,减轻数据库压力,有人...
外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。 也就是说从表的外键值必须在主表中能找到或者为空。 当主表的记录被从表参照时,主表的记录将不...
在NDB Cluster存储引擎中,TEXT和BLOB列的实施是不同的,其中TEXT列中的每个记录由两个单独部分组成。一个是固定大小(256字节),并且实际上保存在原表中。另一个包括超出256字节的任何数据,保存在隐含的表中。第2个...
数据库整理文 索引一般是放在磁盘中的,索引是存储引擎用于快速找到记录的一种数据结构。索引优化应该是对查询优化最有效的手段了。...创建一个包含两个列的索引,和创建两个包含只包含一列的索引是大不相同的。
最近又有网友评论了我的这个回答,我才开始查了一下百度,发现Mysql4.0以上版本已经可以通过一条delete删除多个表的数据了。看来我确实在误人子弟了,只能说声抱歉,好在楼主没有选我的答案,要不然罪过大了。 最后...
MySql的用户管理是通过 User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...
4 1.1.5总结 5 1.2 关系数据库管理系统 5 1.2.1 关系数据库系统...列和数据类型 9 1.3.2函数 9 1.3.3 SQL的语句 9 1.3.4总结 10 1.4 MYSQL数据处理 10 1.4.1 MySQL的数据 10 1.4.1.1、字符...
2.对各表中的数据进行不同条件的连接查询和嵌套查询; 1) 查询每个学生及其选课情况; 2) 查询每门课的间接先修课 3) 将STUDENT,SC进行右连接 4) 查询有不及格的学生姓名和所在系 5) 查询所有成绩为优秀...
查询数据是指从数据库中的数据表或视图中获取所需要的数据,在mysql中,可以使用SELECT语句来查询数据。根据查询条件的不同,数据库系统会找到不同的数据。 SELECT语句的基本语法格式如下: [sql] view plain copy ...
单击此处添加标题 * * * * * * * * * * * * 目录页 MYSQL联合查询上 联合查询注入原理-SQL的union查询 SQL中UNION 操作符用于合并两个或多个 SELECT 语句的结果集。UNION 内部的 SELECT 语句必须拥有相同数量的列。...
为了避免插入相同的数据(所谓相同的数据,其主键相同或者是唯一索引的字段相同),我创建的索引如下图,主键索引为自增字段,不可能出现重复,即唯一索引可能会出现重复,我希望的是uid,year,mounth,day 这三个字段...
4 1.1.5总结 5 1.2 关系数据库管理系统 5 1.2.1 关系数据库系统...列和数据类型 9 1.3.2函数 9 1.3.3 SQL的语句 9 1.3.4总结 10 1.4 MYSQL数据处理 10 1.4.1 MySQL的数据 10 1.4.1.1、字符...
外键:外键用于关联两个表。 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似...
输入show databases并回车,屏幕显示出当前已有的两个数据库mysql和test · 方法二:不使用winmysqladmin 1)、在DOS窗口下,进入d:/mysql/bin目录 2)、win9X下)运行: mysqld 在NT下运行: mysqld-nt --...
#DB Copier 将您的数据从一个 MySQL 数据库表复制到另一个按列,具有不同的名称或结构有一次我遇到了将数据从一个 MySQL 数据库传输到另一个具有完全不同结构但不是数据的问题。 需要手动控制,所以我写了这个脚本来...
此语句的作用是向表table中插入两条记录。如果主键id为1或2不存在就相当于 insert into table (id,name) values(‘1′,’aa’),(‘2′,’bb’) 如果存在相同的值则不会插入数据 2.replace(object,search,rep
两个表之间数据的同步,可以增量或全量更新。 两个表表结构的同步,包括自动建表,原表扩展长度长度或增加长度,目标表也做相同动作。 支持指定原表或目标表的分段序列,更灵活。替换按目标表的分段序列查询原表的...