2014-03-27 21 views
2
table name: mysample. 
table columns: id - PK, names - pk, age. 

內MYSAMPLE行:更換,如果相同的主鍵

id names  age 
1 Nicole  19 
2 Sam   20 
3 Mark   15 

我使用MySQL工作臺。

這就是結果後,我用這個查詢:

load data local infile 'C:/Users/mysample.csv' into table mysample fields terminated by ',' 
enclosed by '"' 
lines terminated by '\n' 
ignore 1 lines 
(names, age) 

這將CSV文件加載到數據庫中。我修改了csv文件並進行了這些更改。

內修改CSV文件:

names  age 
Nicole  20 
Sam   15 
Mark   13 
May   10 

我想實現的是行妮可,薩姆和馬克將被更新從而不具有相似的名稱。這就是爲什麼我將名稱作爲主鍵。我搜索並找到REPLACE查詢語法。

load data local infile 'C:/Users/mysample.csv' replace into table mysample fields  
terminated by ',' 
enclosed by '"' 
lines terminated by '\n' 
ignore 1 lines 
(names, age) 

但我得到了我的數據庫中的這些結果:

id names  age 
1  Nicole  19 
2  Sam   20 
3  Mark   15 
4  Nicole  20 
5  Sam   15 
6  Mark   13 
7  May   10 

如何指定替換查詢使用相同的主鍵來代替行?

+1

只是要ID是唯一首要的關鍵。從主鍵刪除名稱 – Madhawas

+0

[**使名稱UNIQUE而不是主要這種方式它不會重複註冊重複的名稱。**](http://stackoverflow.com/a/13425727/342740) – Prix

+0

這只是一個例子。我的真實數據有一​​個銷售訂單項目編號,這將是我的主要關鍵。我用auto_increment刪除了列,並將名稱作爲我唯一的主鍵,當我在此示例表和數據上嘗試時,它就起作用了。但是,當我在我的實際數據上使用它時,我得到了錯誤錯誤代碼:1366.錯誤的整數值:''在第1行的'coupon_percent'列。現在我不知道什麼地方出錯了。 – nicole101

回答

1

您可以嘗試將您的新數據加載到臨時表中。然後用下面的查詢來更新表:

update mysample a set 
age = (select t.age from temp_table t where t.names = a.names); 

後,如果您需要插入與names新值的新行,您可以執行:

insert into mysample 
select * from temp_table t where t.names not in (select names from mysample);