2012-11-26 84 views
1

我有两个表格t1和t2。 t1有重复的值。我需要插入从t1到t2的所有记录,但我不想在t2中出现重复记录。我尝试了下面的命令,这对我来说看起来是正确的,当我运行它时没有语法错误,但问题是它没有效果。 t2中没有插入t1的记录。如何从表格向另一个表格插入记录而不重复

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

任何人都可以帮忙吗?

回答

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); 
+0

不确定关于mySql,但至少在Oracle中,你不能说“where name1 NOT EXISTS” - 这只是“where NOT EXISTS” – Gerrat

+0

@Gerrat - 好的捕获是yi是正确的。我更新了查询。 – AnandPhadke

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 

唯一索引方法将保证唯一性。

+0

唯一会引发错误,并且不会执行插入。我在t1中已经有很多重复的记录,我需要在t2中插入它们。 – user1810868

-1

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

+0

-1:a)OP为您提供了使用的列 - 无需使用拼凑的组合构建示例。 b)这会插入dups--这是OP不需要的。 – Gerrat

+0

检查更新...我的坏。 – IROEGBU

+0

c)如果test.t2有其他列(OP从未指出它没有)将会失败; d)应该是'SELECT name1 from test.t1'(not'name2') – Gerrat

0

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

CREATE UNIQUE INDEX unique_name2 ON t2 (name2); 

REPLACE INTO t2 (name2) values ($name1); 
... 
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行。

相关问题