[英]Insert distinct records of one table to another into MySQL
表1:mydata_table
多列。 但是我想获取3列的不同记录。
Email_Office | 电子邮件_个人1 | Email_Personal2
表2:unique_emails
只有3列。 Email_Office | 电子邮件_个人1 | Email_Personal2
我尝试对表2的所有三列使用此代码,以从每列插入不同的记录。
insert into unique_emails
(email_personal1)
select distinct email_personal1
from mydata_table
where Email_Personal1!=""
它插入记录,但是问题是,如果email_office列中有100行,而email_personal1中有300行,那么它将显示前100行中的email_office,其余两列为空,然后从第101行开始,它将显示email_personal1的记录,其余两行列为空。 我想将所有行一起插入。 我怎样才能做到这一点?
如果要插入唯一的三元组电子邮件,则应使用
insert into unique_emails
(email_office, email_personal1, email_personal2)
select distinct email_office, email_personal1, email_personal2
from mydata_table
where email_office!="" OR Email_Personal1!="" OR Email_Personal2!=""
但是在那种情况下,某些电子邮件可能在表unique_emails中多次出现。
假设表1包含记录:
Email_Office | Email_Personal1 | Email_Personal2
------------------------------------------------
a@a.com b@b.com c@c.com
a@a.com b@b.com c@c.com
a@a.com b@b.com e@e.com
a@a.com c@c.com NULL
a@a.com d@d.com e@e.com
然后结果表2
Email_Office | Email_Personal1 | Email_Personal2
------------------------------------------------
a@a.com b@b.com c@c.com
c@c.com e@e.com
d@d.com
UPD。 试试这个:( SQL Fiddle )
insert into unique_emails
(email_office, email_personal1, email_personal2)
select b.email_office, c.email_personal1, d.email_personal2
from (
select @i := @i + 1 AS pos from mydata_table, (select @i := 0) r) a
left join (
select t.*, @j := @j + 1 AS pos
from (select distinct email_office from mydata_table where email_office!="") t,
(select @j := 0) r) b on b.pos = a.pos
left join (
select t.*, @k := @k + 1 AS pos
from (select distinct email_personal1 from mydata_table where email_personal1!="") t,
(select @k := 0) r) c on c.pos = a.pos
left join (
select t.*, @l := @l + 1 AS pos
from (select distinct email_personal2 from mydata_table where email_personal2!="") t,
(select @l := 0) r) d on d.pos = a.pos
where b.email_office is not null or c.email_personal1 is not null or d.email_personal2 is not null
尝试为需要唯一的列创建唯一索引,并使用@Sergey提出的第一个SQL并忽略:
INSERT IGNORE INTO
unique_emails
(email_office, email_personal1, email_personal2)
SELECT DISTINCT
email_office,
email_personal1,
email_personal2
FROM
mydata_table
WHERE
email_office!=""
OR Email_Personal1!=""
OR Email_Personal2!=""
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.