2012-11-26 120 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行。

相關問題