更新语句中的 mysql case 与 REPLACE

Dim*_*ima 4 mysql replace case sql-update

我目前有这样的事情:

UPDATE table1  SET column1 = REPLACE(column1, 'abc', 'abc1') WHERE column1 LIKE '%abc%';
UPDATE table1  SET column1 = REPLACE(column1, 'def', 'def1') WHERE column1 LIKE '%def%';
Run Code Online (Sandbox Code Playgroud)

我正在尝试将这些合并到一个更新语句中,并尝试执行以下操作:

UPDATE table1
SET column1 = 
CASE
WHEN column1 LIKE '%abc%' THEN REPLACE(column1, 'abc', 'abc1')
WHEN column1 LIKE '%def%' THEN REPLACE(column1, 'def', 'def1')
ELSE column1
END;
Run Code Online (Sandbox Code Playgroud)

这是这样做的正确方法吗?我对案例/时间不熟悉。谢谢!

Ome*_*tel 5

由于您使用的是LIKE '%abc%',更新语句将需要全表扫描。在这种情况下,结合这两个语句将提高整体性能。但是,在您的建议中,每一行都会更新,并且大多数行都会更新而不更改(column1 值替换为column1 值)。

您需要确保保留该WHERE子句,以便仅更改真正需要更改的行。这种不必要的磁盘写入速度比检查行是否符合条件要慢。

做这个:

UPDATE table1
SET column1 = 
CASE
WHEN column1 LIKE '%abc%' THEN REPLACE(column1, 'abc', 'abc1')
WHEN column1 LIKE '%def%' THEN REPLACE(column1, 'def', 'def1')
END
WHERE column1 LIKE '%abc%' OR column1 LIKE '%def%';
Run Code Online (Sandbox Code Playgroud)