假设我的数据库中有2个表。 users
和combineusers
我想在users
上向combineusers
插入当前电子邮件,而不会有重复的电子邮件。
INSERT INTO combineusers (Email)
SELECT Email FROM users
在combineusers
答案 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
字段唯一。