MySQL 用同一张表中另一个字段的查询结果填充一个新字段
Posted
技术标签:
【中文标题】MySQL 用同一张表中另一个字段的查询结果填充一个新字段【英文标题】:MySQL Populate a new field with query results from another field in the same table 【发布时间】:2013-04-03 22:47:01 【问题描述】:我有一个包含“名称”字段的大型(100 万+行)数据库/表。但是,我需要一个名字和姓氏字段。
我能够运行查询以在新字段(解析)中以我需要的方式显示拳头和姓氏,但我似乎无法将这些查询结果插入到表中。
我能够在表格中创建字段,但无法填充它们。
我在 phpMyAdmin 中工作,并且该表是通过 ODBC 从 Access 导出的。
下面是几个不起作用的代码示例。自从我不得不使用 SQL 以来已经有几年了,我认为这种方法的逻辑可能是错误的。我当然感谢任何帮助。
不起作用的示例:
INSERT INTO fed2012_aquabarndesign_com (lastname)
select left(Name,InStr(Name,',')) AS lastname
from fed2012_aquabarndesign_com
或
INSERT INTO fed2012_aquabarndesign_com (lastname)
Values (select left(Name,InStr(Name,',')) from fed2012_aquabarndesign_com);
【问题讨论】:
您是要重新插入这些记录,还是只是将您的全名字段拆分为名字和姓氏(更新)? 我试图重新插入记录。想法是在生成其他字段后删除“名称”字段......但我对建议持开放态度。 【参考方案1】:以下是使用 UPDATE
执行此操作的方法——不确定您是否要将 INSERT
那些记录返回到同一个表中:
update fed2012_aquabarndesign_com
set firstname = trim(left(name, instr(name, ' ' ))),
lastname = trim(right(name, length(name) - instr(name, ' ' )))
SQL Fiddle Demo
这确实假设每个全名在名字和姓氏字段之间都有一个空格。
如果您真的想要重新插入这些行,那么这应该可以:
insert into fed2012_aquabarndesign_com (firstname, lastname)
select trim(left(name, instr(name, ' ' ))),
trim(right(name, length(name) - instr(name, ' ' )))
from fed2012_aquabarndesign_com;
SQL Fiddle Demo
【讨论】:
你是有史以来最伟大的人类!效果很好! @WesCook -- 至少 np,很高兴我能帮上忙!以上是关于MySQL 用同一张表中另一个字段的查询结果填充一个新字段的主要内容,如果未能解决你的问题,请参考以下文章