将列B更新为A列,但仅限于表A为空

时间:2014-03-21 21:07:36

标签: mysql

我需要移动列名

中的值
  

options_2

进入列名

  

options_1

但在为空时,。 (图像中的A点。) 如果options_1不为空(图像中的B点),则不会发生任何事情,因为我不想覆盖现有值。

此外,我想清除我们的选项_2。但这次规则应该只是清除我们的options_2,如果它是options_1的完全重复。这样可以确保它不会删除所有option_2值,这些值是数据库中更有效的值。

enter image description here

结构如下:

database_name>> wp_cart66_products

我研究并找到了命令:

  

更新' wp_cart66_products'设置' options_1' =' options_2'

但是这没有条件规则,并且也会转移和覆盖有效值,这是我不想要的。

2 个答案:

答案 0 :(得分:1)

update wp_cart66_products
set options_1 = options_2,
    options_2 = ''
where options_1 IS NULL or options_1 = ''

答案 1 :(得分:1)

这应该做你需要的。请注意,在复制数据时会继续并清除options_2,例如选项1&如果备选方案2保持不变,那么2将是平等的。

UPDATE `wp_cart66_products`
SET
    `options_1` = `options_2`,
    `options_2` = ''
WHERE
    `options_1` = ''
    OR `options_1` IS NULL

这会处理你图片A座的所有情况,但不会触及B座中的那些项目。这听起来像你想要的。

然后,您可以运行这样的第二个查询来处理option_1和option_2从一开始就匹配的情况,并且您想要清除options_2。

UPDATE `wp_cart66_products`
SET `options_2` = ''
WHERE `options_1` = `options_2`

运行这两个查询后,您的字段元组只会有两种不同的情况:

  • options_1是非零长度字符串,options_2是空字符串
  • options_1options_2是非匹配的非零长度字符串。