我有兩個mysql表:TableA有10,000條記錄TableB有2,000條記錄。比較來自兩個mysql表的唯一值
我想將TableA中的8000個唯一記錄複製到TableB中,忽略已經複製的TableB中的2,000個記錄。
我有兩個mysql表:TableA有10,000條記錄TableB有2,000條記錄。比較來自兩個mysql表的唯一值
我想將TableA中的8000個唯一記錄複製到TableB中,忽略已經複製的TableB中的2,000個記錄。
如果唯一性是由PRIMARY KEY
約束或UNIQUE
約束來確定,那麼你可以使用INSERT IGNORE
:
INSERT IGNORE INTO TableB SELECT * FROM TableA;
是重複的行和已TableB中與行衝突會默默地跳過,等8000行應該插入。
有關更多詳細信息,請參閱INSERT
上的文檔。
如果您需要在PHP中執行此操作,請參閱array_diff_key()
函數。使用主鍵值將數組存儲爲數組元素的鍵。但是,在這樣的大型陣列上不能保證這個PHP函數的性能!
使用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。
什麼是這樣的:
insert into TableB
select *
from Table A
where not exists (
select 1
from TableB
where TableB.id = TableA.id
)
或者,如果在表B中的條目是因爲他們的主鍵「不是唯一的」,一個insert ignore
可能做的伎倆,我想。
關於你的PHP數組比較,請在一個新的單獨的問題中發佈。這是無關緊要的,你可以問的問題數量沒有限制。 – 2009-12-17 05:40:38