簡體   English   中英

當兩個表字段在MySQL中具有相同的值時,如何忽略將表中的記錄插入到另一個表中?

[英]How to ignore inserting records from a table to another table when both table field has same value in 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但為了工作,您需要在要插入的表上添加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沒有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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM