数据库
首页 > 数据库> > 当两个表字段在MySQL中具有相同的值时,如何忽略将表中的记录插入到另一个表中?

当两个表字段在MySQL中具有相同的值时,如何忽略将表中的记录插入到另一个表中?

作者:互联网

我有2个表,其中包含姓名和电子邮件.现在我想将这些表合并到一个没有重复记录的新表中.我想使用电子邮件字段来避免两个表中的重复值.我听说INSERT IGNORE查询用于在不影响现有记录的情况下将值插入表中.如何编写INSERT IGNORE查询以检查电子邮件字段以进行复制检查.如果有人知道其他方法也欢迎.

table1:
fid fname   email
--- -----   -----
1   Balaji  balaji@email.com
2   xxxxx    xxxxx@email.com
3   Bala    bala@email.com

table2:

gid gname  gemail
--- -----  ------
1   Bala   bala@email.com
2   vinoth vinoth@email.com

预期结果:

table3:
-------
id name   email
-- ----   -----
1   Balaji  balaji@email.com
2   xxxxx    xxxxx@email.com
3   Bala    bala@email.com
4   vinoth vinoth@email.com

解决方法:

MySQL支持UPDATE ON DUPLICATE KEY,但为了工作,您需要在要插入的表上添加唯一约束.

假设Table3是新表的名称.你需要先添加约束,

ALTER TABLE Table3 ADD CONSTRAINT tb_uq UNIQUE (name, email)

并且您现在可以在新表上拥有唯一记录,以合并上一个表,

INSERT INTO table3(name, email)
SELECT name, email 
FROM
(
    SELECT fid id, fname name, email FROM Table1
    UNION ALL
    SELECT gid id, gname name, gemail email FROM Table1
) s
ON DUPLICATE KEY UPDATE name = VALUES(name);

> SQLFiddle Demo
> INSERT … ON DUPLICATE KEY UPDATE Syntax

不使用ON DUPLICATE KEY UPDATE的替代解决方案.是使用UNION(没有ALL)并假定Table3.ID设置为自动增量

INSERT INTO table3(name, email)
SELECT name, email 
FROM
(
    SELECT fname name, email FROM Table1
    UNION
    SELECT gname name, gemail email FROM Table2
) s

> SQLFiddle Demo

标签:mysql,sql,sql-insert
来源: https://codeday.me/bug/20190625/1283675.html