如果相同的主键替换行

时间:2014-03-27 04:53:03

标签: mysql sql csv replace load-data-infile

table name: mysample.
table columns: id - PK, names - pk, age.

里面的例子:

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

我正在使用MySQL Workbench。

这是我使用此查询后的结果:

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文件并进行了这些更改。

inside修改csv文件:

names       age
Nicole       20  
Sam          15  
Mark         13
May          10

我想要实现的是Nicole,Sam和Mark这些行将被更新,因此没有相似的名字。这就是我将名字作为主键的原因。我搜索并找到了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

如何指定REPLACE查询以使用相同的主键替换行?

1 个答案:

答案 0 :(得分: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);