Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何替换MySQL中的整个列?_Mysql_Sql - Fatal编程技术网

如何替换MySQL中的整个列?

如何替换MySQL中的整个列?,mysql,sql,Mysql,Sql,假设MySQL中有下表Table1: FirstName Residence Bob USA Jane Canada Steve China Residence Japan Canada Mexico MySQL中还有下表Table2: FirstName Residence Bob USA Jane Canada Steve China Residence Japan Canada Mexico 我想更新表1,以便最终结果为:

假设MySQL中有下表Table1:

FirstName Residence
Bob       USA
Jane      Canada
Steve     China
Residence
Japan
Canada
Mexico
MySQL中还有下表Table2:

FirstName Residence
Bob       USA
Jane      Canada
Steve     China
Residence
Japan
Canada
Mexico
我想更新表1,以便最终结果为:

FirstName Residence
Bob       Japan
Jane      Canada
Steve     Mexico
现在,我正在考虑做以下事情:1在两个表上都做一个主键2从表1中删除Residence列3在表上做一个连接。是否有更简单、更有效的方法来更新列?连接至少需要线性时间,而这应该是一个常数时间操作。此外,使用多个更新查询将是乏味和缓慢的

将一行插入MySQL数据库似乎相当快速和简单。我想知道是否有类似的简单方法可以将列插入MySQL数据库


谢谢

有些事件可以更改表中行的顺序,因此您确实需要一个列来区分顺序

如果出于论证的目的,您认为可以依赖于行的存储顺序,那么可以使用以下方法:

请参阅小提琴:


如果我误解了,我很抱歉,但是一个简单的更新sqll不能修复所有这些吗

根据OP的评论:

suppose I want to go to the Residence column, load it into Java, do some processing on it (e.g. strip whitespace, add capital city, capitalize all letters, etc), and then load it back into MySQL. I would rather not do the processing in SQL since I have to make extensive changes
这会有帮助吗?假设您有大量的条目,下面是一些伪代码来展示我的概念

resultset = db.query("select FirstName, Residence from table");
hashmap = process(resultset);
String createSql = "create table temp (firstname, residence)";
db.execute(createSql);    
StringBuffer sb = "insert into temp values ";
for (int i=0; i<hashmap.size;i++){
    //hashmap needs to be loop with iterator, this is just me being lazy
    sb.append("("+hashmap(firstname)+", "+hashmap(residence)+")");
}
db.execute(sb.toString());
db.execute("update table inner join temp on table.firstname=temp.firstname set table.residence = temp.residence")
//remove temp after this maybe

您如何知道哪些人对应于表2中的哪些住宅?表2还有其他列吗?为了便于讨论,让我们假设表2上的住宅直接对应于人。表2没有任何其他列。或者,假设我想转到Residence列,将其加载到Java中,对其进行一些处理,例如去除空白、添加大写城市、将所有字母大写等,然后将其加载回MySQL。我宁愿不使用SQL进行处理,因为我必须进行大量更改。@Rainmaker。SQL和MySQL中的表表示无序集。您需要一列来指定顺序-例如,一个自动递增的id,或者一个插入日期时间。@GordonLinoff-您说得对,我想我最初的示例不是很好。但是我之前的评论呢?如果我想用Java重新格式化这个列,然后将它重新插入MySQL呢?