用多个值更新一列的值
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;
【讨论】:
以上是关于用多个值更新一列的值的主要内容,如果未能解决你的问题,请参考以下文章
根据另一列的另一个值和/或另一行中的同一列更新设置值:-ORA 1427