如何在没有重复的情况下将电子邮件插入另一个表

时间:2011-10-27 12:29:11

标签: mysql sql

假设我的数据库中有2个表。 userscombineusers

我想在users上向combineusers插入当前电子邮件,而不会有重复的电子邮件。

INSERT INTO combineusers (Email)
SELECT Email FROM users

combineusers

上跳过现有电子邮件地址的正确声明是什么

5 个答案:

答案 0 :(得分:2)

MySQL有非标准选项可跳过重复项而不是抛出错误:

INSERT IGNORE INTO combineusers (Email)
SELECT Email FROM users

我引用manual

  

如果使用IGNORE关键字,则执行时会出现错误   INSERT语句被视为警告。例如,没有   IGNORE,一个复制现有UNIQUE索引或PRIMARY KEY的行   表中的值导致重复键错误,语句为   中止。使用IGNORE时,仍未插入行,但没有错误   发出的。

答案 1 :(得分:1)

使用左排除联接。
我不确定是否需要子选择,我知道在更新时需要它 子选择强制MySQL将内部选择实现为临时表并从那里执行插入,这样您就不会插入选择的同一个表中。

INSERT INTO combineusers (Email) 
SELECT * FROM 
(
  SELECT DISTINCT u.Email FROM users u
  LEFT JOIN combineusers c ON (u.email = c.email)
  WHERE c.email IS NULL
) sub

答案 2 :(得分:1)

INSERT INTO combineusers (Email) 
SELECT Email FROM users u
LEFT JOIN combineusers c ON c.Email = u.Email
WHERE c.Email IS NULL

或使用NOT EXISTS

INSERT INTO combineusers (Email) 
SELECT Email FROM users u
WHERE NOT EXISTS 
      (
       SELECT Email 
       FROM combineusers c 
       WHERE c.Email = u.Email
      )

答案 3 :(得分:1)

尝试

INSERT INTO combineusers (Email) SELECT DISTINCT Email FROM users

答案 4 :(得分:0)

您的问题并不是那么清楚,但如果我理解正确您的意思,您希望从users获取电子邮件地址并将其插入combineusers,同时避免插入任何电子邮件地址已经在combineusers。其他回答者已经展示了一些操纵语句的方法,但实现这一目标的另一种方法可能是声明Email combineusers字段唯一。