2

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

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

有人可以帮忙吗?

4

5 回答 5

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

或者

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);
于 2012-11-26T17:14:18.867 回答
1

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

CREATE UNIQUE INDEX unique_name2 ON t2 (name2);

REPLACE INTO t2 (name2) values ($name1);
...
于 2012-11-26T17:40:47.277 回答
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

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

于 2012-11-26T17:15:58.240 回答
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 行。

于 2015-10-21T07:27:58.233 回答
-1

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

于 2012-11-26T17:18:07.200 回答