如何将表中的记录插入另一个没有重复的记录

时间:2012-11-26 17:06:46

标签: mysql

我有两个表t1和t2。 t1具有重复的值。我需要插入从t1到t2的所有记录,但我不希望在t2中出现重复。我尝试了以下命令,这对我来说是正确的,当我运行它时没有语法错误但是问题,它有0效果。 t1中没有插入t1的记录。

insert into test.t2 (name2) 
select name1 from test.t1 where NOT EXISTS (select name2 from test.t2);

有人可以帮忙吗?

5 个答案:

答案 0 :(得分:5)

insert into test.t2(name2) 
select distinct name1 from test.t1 where name1 NOT IN(select name2 from test.t2);

OR

insert into test.t2(name2) 
select distinct name1 from test.t1 t1 where NOT EXISTS(select name2 from test.t2 t2 where t1.name1=t2.name2);

答案 1 :(得分:0)

这里有两个选项,一个是不复制插入数据,第二个是插入时忽略重复数据。

要从SELECT调用中删除,请使用“DISTINCT:

INSERT INTO test.t2 (name2) SELECT name1 FROM test.t1 WHERE name1 NOT IN (SELECT name2 FROM test.t2)

您还可以添加UNIQUE索引以避免此问题:

ALTER TABLE t2 ADD UNIQUE INDEX index_name2 (name2)

请注意,如果t2中已有重复数据,您将收到错误消息,因此您可能需要事先清理它。

然后您可以使用IGNORE选项添加数据:

INSERT IGNORE INTO test.t2 (name2) SELECT name1 FROM TEST.t1

独特的指数方法将保证唯一性。

答案 2 :(得分:0)

您可以创建一个唯一索引(一列或多列),然后使用MySQL replace命令。

CREATE UNIQUE INDEX unique_name2 ON t2 (name2);

REPLACE INTO t2 (name2) values ($name1);
...

答案 3 :(得分:0)

我需要将数据从用户插入到另一个用户并在编写此语句时 .....

insert into trep12.jobhead
select
*
from
wsfin04.jobhead
where
wsfin04.jobhead.job_no not in (select job_no from trep12.jobhead)
and wsfin04.jobhead.CHASS_NO not in (select CHASS_NO from trep12.jobhead)
and rdate between '01-jul-15'
and '01-oct-15'
and job_type = 1;

..... 结果是创建了0行。

答案 4 :(得分:-1)

这应该这样做:
INSERT IGNORE INTO test.t2 SELECT name2 FROM test.t1
从一个表中选择并插入到另一个表中。