2011-08-11 57 views
2

我正在寫一個數據庫,需要能夠從另一個數據庫導入信息。我的數據庫有一個成員表和另一個成員表可以授予成員的權限(一個成員可以被授予多種類型的權限)。成員表包含一個列,用於存儲來自其他數據庫成員的主鍵,以實現順利導入。mySQL導入/重複鍵

我的問題是,當我從其他數據庫中導入其他數據庫密鑰和權限時,將其他密鑰變爲我的密鑰,我很可能重複權限表中的條目,mySQL正確不允許。我希望它能夠繼續,並且可以更改它的內容,並且我知道那些沒有更改的內容我可以刪除。

有人可以幫助我,或有一個完全不同的解決方案?

+0

如果你是刪除重複的東西,爲什麼你不使用插入忽略,只遷移非重複? – Jacob

+0

當我進行原始導入時,我正在使用導入.csv的客戶端,我不認爲我可以告訴它將正確的外鍵替換爲其他鍵。然後,我想使用這樣的查詢: UPDATE GRANTED,MEMBERS SET GRANTED.MEM_ID = MEMBERS.MEM_ID WHERE GRANTED.MEM_ID = MEMBERS.MEM_SK_ID 此更新第一次工作,我希望它會盡其所能剩下的就離開了。 – Andrew

+1

更好的是,如果你有一個CSV文件,只需使用'LOAD DATA INFILE ...',重複項會被自動忽略。 – Jacob

回答

0

只需在您的查詢中添加一個IGNORE即可,並丟失not in。重複的錯誤將被視爲警告,並且您的導入只會繼續使用唯一的數據。您不需要手動復出並刪除重複項。

INSERT IGNORE INTO GRANTED (MEM_ID,PERM_CODE) 
SELECT MEMBERS.MEM_ID AS MEM_ID,PERM_CODE 
FROM MEMBERS 
JOIN TEMP 
ON (MEMBERS.MEM_SK_ID=TEMP.MEM_ID)