【面经】Epic: 数据库去重
题目是:有2个10G的数据库,存储了一些string. 2者之间有一些重复的数据。请把它们合并为一个数据库,并且去除重复。
限制:内存是4G
例如: DB1: cmu, ucb, stanford, nyu
DB2: ucsb, ucb, ucsd, cmu.
两者合并后,应该是: DB: cmu, ucb, stanford, nyu, ucsb, ucsd.
作法:把DB1分为5个小的数据库,分别是DB11, DB12, DB13, DB14, DB15
把DB2分为5个小的数据库,分别是DB22, DB22, DB23, DB24, DB25
把DB11 与 DB22, DB22, DB23, DB24, DB25 分别进行Union操作,生成DB11Merge.
把DB12 与 DB22, DB22, DB23, DB24, DB25 分别进行Union操作,生成DB12Merge.
......
最后再把DB11Merge, DB12Merge, DB13Merge, DB14Merge, DB15Merge 合并在一起即可
用以下语句即可:
mysql> insert into merge select * from persons2;
1. How do I merge two tables in Access while removing duplicates?
以下是实验结果:
A UNION query returns only distinct rows. (There is also UNION ALL, but that would include duplicate rows, so you don't want it here.)
mysql> select * from persons2; +-----------+ | FirstName | +-----------+ | zelin | | qihao | +-----------+ rows in set (0.00 sec) mysql> select * from persons; +-----------+ | FirstName | +-----------+ | yu | | zhixu | | zelin | +-----------+ rows in set (0.00 sec) mysql> mysql> select * from persons union select * from persons2; +-----------+ | FirstName | +-----------+ | yu | | zhixu | | zelin | | qihao | +-----------+ rows in set (0.00 sec)
2. Join
顺便介绍几个DB常用的merge用的语句:
http://www.w3schools.com/sql/sql_join.asp
An SQL JOIN clause is used to combine rows from two or more tables, based on a common field between them.
The most common type of join is: SQL INNER JOIN (simple join). An SQL INNER JOIN return all rows from multiple tables where the join condition is met.
Let's look at a selection from the "Orders" table:
| OrderID | CustomerID | OrderDate |
|---|---|---|
| 10308 | 2 | 1996-09-18 |
| 10309 | 37 | 1996-09-19 |
| 10310 | 77 | 1996-09-20 |
Then, have a look at a selection from the "Customers" table:
| CustomerID | CustomerName | ContactName | Country |
|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mexico |
Notice that the "CustomerID" column in the "Orders" table refers to the "CustomerID" in the "Customers" table. The relationship between the two tables above is the "CustomerID" column.
Then, if we run the following SQL statement (that contains an INNER JOIN):
Example
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;
it will produce something like this:
| OrderID | CustomerName | OrderDate |
|---|---|---|
| 10308 | Ana Trujillo Emparedados y helados | 9/18/1996 |
| 10365 | Antonio Moreno Taquería | 11/27/1996 |
| 10383 | Around the Horn | 12/16/1996 |
| 10355 | Around the Horn | 11/15/1996 |
| 10278 | Berglunds snabbköp | 8/12/1996 |
Different SQL JOINs
Before we continue with examples, we will list the types the different SQL JOINs you can use:
- INNER JOIN: Returns all rows when there is at least one match in BOTH tables
- LEFT JOIN: Return all rows from the left table, and the matched rows from the right table
- RIGHT JOIN: Return all rows from the right table, and the matched rows from the left table
- FULL JOIN: Return all rows when there is a match in ONE of the tables
3. Full Join
在mysql中没有full join语句,我们需要用union:
mysql> SELECT * FROM persons LEFT JOIN persons2 ON persons.firstName=persons2.firstName UNION SELECT * FROM persons RIGHT JOIN persons2 ON persons.firstName=persons2.firstName;
+-----------+-----------+
| FirstName | FirstName |
+-----------+-----------+
| zelin | zelin |
| yu | NULL |
| zhixu | NULL |
| NULL | qihao |
+-----------+-----------+
4 rows in set (0.00 sec)
4. REPLACE Syntax
使用replace语句也可以达到去重的效果。前提是,我们把想要去重的项目设置为primary key即可。
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
Or:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO]tbl_name
SETcol_name={expr| DEFAULT}, ...
Or:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO]tbl_name[(col_name,...)]
SELECT ...
REPLACE works exactly like INSERT, except that if an old row in the table has the same value as a new row for aPRIMARY KEY or a UNIQUE index, the old row is deleted before the new row is inserted. See Section 13.2.5, “INSERT Syntax”.
【面经】Epic: 数据库去重的更多相关文章
- postgresql数据库去重方法
数据库去重有很多方法,下面列出目前理解与使用的方法 第一种 通过group by分组,然后将分组后的数据写入临时表然后再写入另外的表,对于没有出现再group by后面的field可以用函数max,m ...
- MySQL数据库去重 SQL解决
MySQL数据库去重的方法 数据库最近有很多重复的数据,数据量还有点大,本想着用代码解决,后来发现用SQL就能解决,这里记录一下 看这条SQL DELETE consum_record FROM ...
- mysql数据库去重语句和不同表之间列的复制语句
1.去重语句:DELETE FROM `v_klg_item` WHERE id NOT IN (SELECT * FROM (SELECT MAX(id) FROM `v_klg_item` GRO ...
- mongodb篇二:mongodb克隆远程数据库,去重查询的命令及对应java语句
http://blog.csdn.net/qkxh320/article/details/16115671 1.首先操作mongodb最基本命令:: show databases; ...
- python scrapy爬虫数据库去重方法
1. scrapy对request的URL去重 yield scrapy.Request(url, self.parse, dont_filter=False) 注意这个参数:dont_filter= ...
- GP开发示例:数据库去重
这个例子专业讲解基于ArcEngine使用GP开发的过程及遇到的问题.更多GP使用方法:GP使用心得 功能需求:现在外业第一次数据(简称调绘.mdb)和第二次数据(简称检查.mdb)有重复.第二次是在 ...
- 面试题: mysql 数据库去重 已看1 不好使
mysql去重面试总结 前言:题目大概是这样的. 建表: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE TABLE `test2` ( `id` ...
- MongoDB数据库去重
查询: db.patents_texts.aggregate([ { $group:{_id:{Patent_num:'$Patent_num',Patent_name:'$Patent_name'} ...
- 数据库去重与join连表
join连表删除的效率与检测存在之后删除的效率比,后者的效率低了很多
随机推荐
- Memcache的使用基本介绍
Memcache学习总结2-Memcache的使用基本介绍 上一次总结中我们已经安装部署好了Memcached,并且把PHP扩展Memcache也安装好了,这一节我们详细学习一下PHP扩展Memcac ...
- 给“.Net工资低”争论一个了结吧!
昨天我写了一篇<工资低的.Net程序员,活该你工资低>,底下的支持.争吵.骂娘的评论依旧像之前几篇园友的博客一样繁荣.公说公有理,婆说婆有理,这样争吵下去永远没有尽头.数据没有情绪,是公正 ...
- asp.net froms 移动平台(iphone 微信)无法存储的解决办法。
更改form的默认设置,让系统不再根据设备来判断是否支持cookie 在站点的配置文件中有关于Form认证的配置,在配置<authentication mode="Forms" ...
- 消灭ASP.NET CachedPathData.ValidatePath引起的HttpException异常
在博客程序的日志中经常会出现这样的错误日志: Url: http://www.cnblogs.com/cmt/p/sokcet_memory_leak.html (这个URL仅是示例)UserAgen ...
- 重新延时运行的Js 实现
场景 1. AutoComplete 插件, 当用户的输入空闲0.5s 时,才向服务发送请求.而不是用户输入每一个字符都要请求服务器. 2. 图片懒加载时,用户拖动滚动条空闲0.5s时,才遍历懒加载的 ...
- [ACM_暴力][ACM_几何] ZOJ 1426 Counting Rectangles (水平竖直线段组成的矩形个数,暴力)
Description We are given a figure consisting of only horizontal and vertical line segments. Our goal ...
- 浅谈sql中的in与not in,exists与not exists的区别
转 浅谈sql中的in与not in,exists与not exists的区别 12月12日北京OSC源创会 —— 开源技术的年终盛典 » sql exists in 1.in和exists ...
- Linux asyn-io for socket
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h&g ...
- atitit.atitit.hb many2one relate hibernate 多对一关联配置..
atitit.atitit.hb many2one relate hibernate 多对一关联配置.. 1. 多对一单向 @ManyToOne 1 1. 其中@JoinColumn 注解 2 2. ...
- NGUI ScrollView 循环 Item 实现性能优化
今天来说说一直都让我在项目中头疼的其中一个问题,NGUI 的scrollView 列表性能问题,实现循环使用item减少性能上的开销. 希望能够给其他同学们使用和提供一个我个人的思路,这个写的不是太完 ...