2015-08-27 141 views
1

我有CSV文件,我需要在我的表中插入數據之前,做這樣的事情:檢查記錄存在

table fields 
id = primary id and auto-increment 
house_no 
city_code 
prv_code 
cty_code 


if (house_no,city_code,prv_code,cty_code) exists = ignore insert 
else if (house_no,city_code,prv_code,cty_code) is null = ignore insert 
else (house_no,city_code,prv_code,cty_code) !exist = insert 

我原來的代碼只是重新插入相同的值,因爲主鍵ID只是爲它創建一個新的ID,結果我有重複。

我需要這樣做以避免重複。我試過INSERT IGNOREREPLACE,但我需要一個唯一的密鑰,並且所有的字段可能有相同的值(比如它們可能有不同的house_no,但是相同的prv_codecty_code或類似的東西)。我只想在插入之前檢查記錄是否存在。

+0

我不確定如果我正確理解了你,但爲什麼不使用'TRIGGER'。但是,您提供了大量的信息。 – mic4ael

回答

1

您可以在多個列上創建唯一鍵。在你的情況下,你需要一個包含四列house_no,city_code,prv_codecty_code的唯一密鑰。

你的情況:從CSV文件

ALTER TABLE fields 
ADD CONSTRAINT uc_fieldsUnique UNIQUE (house_no,city_code,prv_code, cty_code); 
0

將數據加載到第二個表,然後使用INSERT這樣添加行 -

INSERT INTO t1(id, house_no, city_code, prv_code, cty_code) 
    SELECT NULL, t2.house_no, t2.city_code, t2.prv_code, t2.cty_code FROM t2 
    LEFT JOIN t1 ON t1.house_no = t2.house_no AND t1.city_code = t2.city_code AND t1.prv_code = t2.prv_code AND t1.cty_code = t2.cty_code 
     WHERE t1.id IS NULL 

(重命名錶名)