2011-08-11 8 views
2

私は別のデータベースから情報をインポートする必要があるデータベースを作成しています。私のデータベースには、メンバーのテーブルと、メンバーが付与される可能性のあるアクセス許可の別のテーブルがあります(メンバーに複数のタイプのアクセス権が付与されている可能性があります)。メンバテーブルには、円滑なインポートを目的として、他のDBのメンバのプライマリキーを格納する列が含まれています。mySQLインポート/複製キー

私の問題は、他のデータベースから他のDBキーとアクセス許可をインポートしてから、 "他のキー"を自分のキーに変えると、mySQLが正しく許可しない許可テーブルのエントリを複製する可能性が高いことです。私は先に進んでできるものを変えたいと思います。変更できないものは私が知ることができます。

誰かが私を助けてくれますか、まったく違う解決策がありますか?

+0

、なぜあなたは、単に無視し、インサート使用していないと、唯一の非重複を移行しますか? – Jacob

+0

元のインポートを行うときに、.csvをインポートしているクライアントを使用していますが、他のキーに正しい外部キーを代用するように伝えることはできません。次に、このようなクエリを使用したいと考えています。 更新プログラムの承認、メンバの設定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)