在使用case / the /然后时,如何忽略不在CASE语句中的记录?
例如,该语句将按预期更新三条匹配记录,但使所有不匹配时间/然后子句的学生记录变为空
UPDATE table SET student = (CASE WHEN student = '10' THEN '100412'
WHEN student = '17' THEN '100295'
WHEN student = '26' THEN '100981'
END)
WHERE year = '2019';
如何跳过不在CASE语句中的记录,而只更改具有匹配子句的记录?
发布于 2019-11-14 15:43:28
您可以使用默认的大小写:
UPDATE table SET student = (CASE WHEN student = '10' THEN '100412'
WHEN student = '17' THEN '100295'
WHEN student = '26' THEN '100981'
ELSE student
END)
WHERE year = '2019';
否则,如果希望最小化负载,只需将所有已知的student
值添加到WHERE
子句中即可。这只会触发对真正受更改影响的行的更新。
发布于 2019-11-14 15:45:51
对于跳过记录,而不是在case语句中,您可以使用这样的方法
UPDATE table SET student = (CASE WHEN student = '10' THEN '100412'
WHEN student = '17' THEN '100295'
WHEN student = '26' THEN '100981'
END)
WHERE year = '2019' AND student IN ('10','17','26');
发布于 2019-11-14 15:45:12
我认为有两个解决办法:
UPDATE table SET student = (CASE WHEN student = '10' THEN '100412'
WHEN student = '17' THEN '100295'
WHEN student = '26' THEN '100981'
END)
WHERE year = '2019' AND student IN ('10','17','26');
UPDATE table SET student = (CASE WHEN student = '10' THEN '100412'
WHEN student = '17' THEN '100295'
WHEN student = '26' THEN '100981'
ELSE student
END)
WHERE year = '2019';
https://stackoverflow.com/questions/58860583
复制相似问题