我想使用case语句更新表中的多个列,但我找不到如何执行此操作(这是否可行)。我想出了以下无效的引用查询:
UPDATE tablename SET
CASE name
WHEN 'name1' THEN col1=5,col2=''
WHEN 'name2' THEN col1=3,col2='whatever'
ELSE col1=0,col2=''
END;
有没有办法用有效的SQL实现预期的结果?
答案 0 :(得分:34)
UPDATE tablename
SET col1 = CASE WHEN name = 'name1' THEN 5
WHEN name = 'name2' THEN 3
ELSE 0
END
, col2 = CASE WHEN name = 'name1' THEN ''
WHEN name = 'name2' THEN 'whatever'
ELSE ''
END
;
答案 1 :(得分:8)
我不知道有什么干净的方法来做你所要求的。等效的有效SQL更新将是:
UPDATE tablename SET
col1 = CASE name WHEN 'name1' THEN 5 WHEN 'name2' THEN 3 ELSE 0 END,
col2 = CASE name WHEN 'name1' THEN '' WHEN 'name2' THEN 'whatever' ELSE '' END;
当然这并不漂亮,需要多次重复相同的情况(例如'name1'
),但我认为不可能有任何其他方式。
答案 2 :(得分:0)
如果name
具有唯一索引并且表中存在您的值,则可以使用此技巧:
INSERT INTO tablename (name, col1, col2)
VALUES ('name1', 5, '')
, ('name2', 3, 'whatever')
ON DUPLICATE KEY UPDATE
col1 = VALUES(col1)
, col2 = VALUES(col2);
如果有任何其他NOT NULL
列没有默认值,则必须为这些列添加虚拟值。只要将它们排除在ON DUPLICATE KEY UPDATE
之外,它们就会被忽略。