【问题标题】:How to ignore inserting records from a table to another table when both table field has same value in MySQL?当两个表字段在 MySQL 中具有相同的值时,如何忽略将记录从一个表插入另一个表?
【发布时间】:2013-06-25 05:19:49
【问题描述】:

我有 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 sql sql-insert


【解决方案1】:

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

假设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);

不使用ON DUPLICATE KEY UPDATE 的替代解决方案。是使用UNION没有全部)并假设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

【讨论】:

    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多