【问题标题】:need to move data from one field to another, within the same table需要在同一个表中将数据从一个字段移动到另一个字段
【发布时间】:2011-09-15 17:54:19
【问题描述】:

我想将所有数据从 field_id_41 移到 field_id_380,其中 weblog_id = 191

这两个字段属于同一张表:exp_weblog_data

我不想在这里不问就运行任何东西,我开始把它放在一起:

UPDATE 
  exp_weblog_data 
SET 
  field_id_380 = (SELECT field_id_41 FROM exp_weblog_data 
  WHERE (field_id_41 != '' and weblog_id = 191)) 
WHERE 
  weblog_id = 191

【问题讨论】:

  • weblog_id 是主键还是唯一键?
  • 您的意思是move 还是copyfield_id_41 列之后应该为空吗?

标签: mysql


【解决方案1】:

真的不需要子查询。您可以只取同一行中另一列的值,并将其设置在第一列中:

UPDATE 
  exp_weblog_data 
SET 
  field_id_380 =field_id_41 
WHERE 
  weblog_id = 191
AND 
  field_id_41 != ''

【讨论】:

  • 假设他只想要来自同一行的数据...... OP 指定了同一个表但不是同一行。
  • @RedFilter:正确,他的“从一个领域到另一个领域”让我假设了这一点。否则,需要连接或子查询,但我很好奇他当时试图实现的目标......
  • 对我来说“移动”意味着 field_id_41 之后是空的,所以:SET field_id_380 =field_id_41, field_id_41 = '' ...
  • 对于每一行,我想将其各自的数据从 field_id_41 移动到 field_id_380
  • 如果人们能够区分移动和复制,那就太好了。不幸的是,当我的老板告诉我我可以拥有一辆更大的汽车或升职时,他的意思是异或而不是或。
【解决方案2】:

可能是这样的:

UPDATE 
  exp_weblog_data 
SET 
  field_id_380 =field_id_41,   field_id_41 = ''
WHERE 
  weblog_id = 191
AND 
  field_id_41 != ''

【讨论】:

    【解决方案3】:

    如果我是你,我会做的是对该数据库进行备份并将其托管在另一台(或同一台)服务器上。一旦你这样做了,你就可以随意发疯并进行实验,而不必担心丢失任何真实数据。不过,这个查询对我来说看起来不错。

    【讨论】:

    • 我认为这在任何数据库实验中都是隐含的
    猜你喜欢
    • 2019-09-16
    • 2014-02-23
    • 2017-08-07
    • 2017-09-11
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2013-11-22
    相关资源
    最近更新 更多