我有很多字段需要大量替换而不破坏该列中的其他数据。

如果我运行:

UPDATE ospos_items AS a 
INNER JOIN ospos_items AS b ON a.item_id = b.item_id 
SET a.custom7 = 'Detective Novels' 
WHERE a.custom7 = 'DN' 
AND a.custom3 = 'English Literature'; 

更新完全是非破坏性的。但是,如果我运行以下代码以合并查询:

UPDATE ospos_items AS a 
INNER JOIN ospos_items AS b ON a.item_id = b.item_id 
SET a.custom7 = CASE 
WHEN a.custom7 = 'DN' THEN 'Detective Novels' 
WHEN a.custom7 = 'HF' THEN 'Historical Fiction' 
WHEN a.custom7 = 'HUM' THEN 'Humor' 
WHEN a.custom7 = 'NOV' THEN 'Novels' 
WHEN a.custom7 = 'YA' THEN 'Young Adults' 
END 
WHERE a.custom3 IN('English Literature'); 

它将该列中的所有值设置为在 CASE 中找不到的 NULL。例如,该列中的某些字段已被转换。如何使我的第二个查询对 CASE 语句中未找到的值无损?

请您参考如下方法:

有两种解决方法:

  1. ELSE a.custom7 添加到CASE 表达式。如果 WHEN 条件都不匹配,它将保持相同的值。
  2. AND a.custom7 IN ('DN', 'HF', 'HUM', 'NOV', 'YA') 添加到 WHERE 子句。然后它只会更新其中一个 CASE 表达式匹配的行。

顺便说一句,当您在每个 WHEN 子句中测试同一列时,您可以使用更简单的方法:

CASE a.custom7 
WHEN 'DN' THEN 'Detective Novels' 
WHEN 'HF' THEN 'Historical Fiction' 
... 
END 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!