2009-12-17 59 views
1

我有兩個mysql表:TableA有10,000條記錄TableB有2,000條記錄。比較來自兩個mysql表的唯一值

我想將TableA中的8000個唯一記錄複製到TableB中,忽略已經複製的TableB中的2,000個記錄。

+0

關於你的PHP數組比較,請在一個新的單獨的問題中發佈。這是無關緊要的,你可以問的問題數量沒有限制。 – 2009-12-17 05:40:38

回答

5

如果唯一性是由PRIMARY KEY約束或UNIQUE約束來確定,那麼你可以使用INSERT IGNORE

INSERT IGNORE INTO TableB SELECT * FROM TableA; 

是重複的行和已TableB中與行衝突會默默地跳過,等8000行應該插入。

有關更多詳細信息,請參閱INSERT上的文檔。

如果您需要在PHP中執行此操作,請參閱array_diff_key()函數。使用主鍵值將數組存儲爲數組元素的鍵。但是,在這樣的大型陣列上不能保證這個PHP函數的性能!

1

使用INSERT INTO語法:

INSERT INTO TABLE_B 
    SELECT * 
    FROM TABLE_A a 
    WHERE NOT EXISTS(SELECT NULL 
         FROM TABLE_B b 
        WHERE b.column = a.column) 

你需要更新WHERE b.column = a.column)滿足,但是你確定的記錄已經存在於表-B。

0

什麼是這樣的:

insert into TableB 
select * 
from Table A 
where not exists (
    select 1 
    from TableB 
    where TableB.id = TableA.id 
) 

或者,如果在表B中的條目是因爲他們的主鍵「不是唯一的」,一個insert ignore可能做的伎倆,我想。