MySQL 查询以删除两个数据库 RD 中常见的数据(MYSQL DB)



例如:

**table 1**
name     gender  email
hemanth    m       test@gmail.com 
rajesh     m       rajesh@gmail.com 
kumar      m       kumar@gmail.com
**table 2***
name     gender    email
hemanthsai m       testing@gmail.com 
rajesh     m       rajesh@gmail.com 
kumaras    f       kumaras@gmail.com
**expected result in table 1***
name     gender    email
hemanthsai m       testing@gmail.com 
rajesh     m       rajesh@gmail.com 
kumaras    f       kumaras@gmail.com

这只是一个例子,实际上我必须在MySQL中一次更新许多列的所有数据

我尝试的是

INSERT INTO table1 (NAME,gender, email) VALUES(?, ?, ?), (?, ?, ?)
ON DUPLICATE KEY UPDATE SET *;    ### this didn""t worked ###

我需要这样的东西:

INSERT INTO table1 * ON DUPLICATE KEY UPDATE SET *; 

如果这不起作用,那么我想到使用另一个表删除一个表上的公共值,然后将剩余的值插入到已删除的表中,所以我需要查询以基于另一个表删除一个表上的公共值。

提前感谢,

创建另一个表:

CREATE TABLE table3 (
name VARCHAR(50),
gender VARCHAR(50),
email VARCHAR(50));

在新表上创建唯一索引:

CREATE UNIQUE INDEX index_name
ON table3 (name, gender, email);

从表1和表2中INSERT IGNORE

INSERT IGNORE INTO table3 SELECT * FROM table1;
INSERT IGNORE INTO table3 SELECT * FROM table2;

检查您的table3,它应该不再有任何重复项。

演示

P/S:如果您只想检查重复的电子邮件 - 并允许同一用户拥有多封电子邮件,则可以跳过创建唯一索引并将email列作为PRIMARY KEYtable3

你试过INSERT INTO SELECT吗?

例:

INSERT INTO `table1`
(`name`, `gender`, `email`)
SELECT t2.`name`, t2.`gender`, t2.`email`
FROM `table2` AS t2
ON DUPLICATE KEY UPDATE
`name`= t2.`name`,`gender` = t2.`gender`, `email` = t2.`email`

您还需要有一个在表 1 和 table2 之间通用的唯一键。我认为情况确实如此。

编辑

考虑到您的评论,您正在寻找的可能是REPLACE INTO.

REPLACE INTO `table1` 
SELECT *
FROM `table2`

请注意,此操作不会更新旧值,但实际上会删除它们。这意味着如果PRIMARY_KEY具有例如auto_increment(),则可以替换该。 另请注意,这是一项繁重的操作,因为每次删除操作都需要对表重新编制索引。

您可以在此处阅读有关它的更多信息:http://code.openark.org/blog/mysql/replace-into-think-twice

就个人而言,即使有很多列,我也会使用INSERT INTO

最新更新