我有两个表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);
有人可以帮忙吗?
答案 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
从一个表中选择并插入到另一个表中。