用多个值更新一列的值

Posted

技术标签:

【中文标题】用多个值更新一列的值【英文标题】:Update values of one column with multiple values 【发布时间】:2020-06-27 18:38:59 【问题描述】:

有一个表,该表有一个名为 country 的列,我需要在一个查询而不是多个查询中更改该列的值。

在此查询中,我将埃及的任何值更改为 1

UPDATE subscribers
SET country = 1 WHERE country = 'Egypt';

在此查询中,我将卡塔尔的任何值更改为 2

UPDATE subscribers
SET country = 2 WHERE country = 'Qatar';

将这两个查询合二为一有什么帮助吗?

【问题讨论】:

欢迎来到 SO。请看Why should I provide an MCRE for what seems to me to be a very simple SQL query ...或者只是执行一个查询 【参考方案1】:

考虑:

UPDATE subscribers SET country =  
CASE
  WHEN country = "Egypt" THEN 1
  WHEN country = "Qatar" THEN 2
  ELSE country 
END
;

现在想象一下为更多国家/地区做这种表达。而是加入一个“映射”数据关联的表(国家名称的主表)。加入 CountryName 字段并使用“映射”表中的 ID 更新目标表 CountryName 字段。转换为数字类型字段。或者安全起见并更新到另一个字段,当一切正常时,删除原始字段。

【讨论】:

我收到错误 ERROR 1305 (42000): FUNCTION pinsubmit.Switch 不存在 查询对我有用。但我正在使用访问。抱歉,刚刚注意到您使用的是 mysql。 MySQL 可能使用 CASE。 ***.com/questions/8348037/…【参考方案2】:

您可以在 MySQL 中使用case 表达式:

UPDATE subscribers
    SET country = (CASE WHEN country = 'Egypt' THEN 1 ELSE 2 END)
    WHERE country IN ('Egypt', 'Qatar');

但是,我建议使用派生表:

UPDATE subscribers s JOIN
       (SELECT 'Egypt' as country, '1' as new_country UNION ALL
        SELECT 'Qatar' as country, '2' as new_country 
       ) x
       USING (country)  
    SET s.country = x.new_country;

【讨论】:

以上是关于用多个值更新一列的值的主要内容,如果未能解决你的问题,请参考以下文章

根据另一列值更新数据框的列

如何使用sql语句使一个列的值变成另一个字段的值

Oracle利用触发器更新插入时某一列的值

根据另一列的另一个值和/或另一行中的同一列更新设置值:-ORA 1427

oracle 更新一个列 原来的字段为 ‘你好么’ 更新成 ‘你好’ 为啥 会变成‘你好 ’即多了两个空格。

oracle如何将多个值放在一个字段里面 用逗号隔开