如何重写这个 sql 查询,在不使用 CASE 的情况下更新单个列中的多行
How to rewrite this sql query, that updates multiple rows in a single column, WITHOUT using CASE
我正在处理一个新项目并尝试更新单个列中的多行。似乎任何使用 CASE 语法的查询都会引发错误。我需要重写此查询,以便不使用 CASE 语法。感谢您的帮助,我有:
UPDATE tableA
SET
column_a = CASE WHEN column_a = 'conserve' THEN 'fixed'
WHEN column_a = 'balance' THEN 'mod'
WHEN column_a = 'balance growth' THEN 'mod growth'
WHEN column_a = 'aggressive' THEN 'mod/agressive'
END;
我在我们的管道中看到的错误是:
Caused by: liquibase.exception.DatabaseException: ERROR: syntax at or near "column_a"
我正在寻找在更新单个列中的多行时使用 CASE 的替代方法。
我会像下面这样写这个查询。这不是很漂亮,但应该完成工作。
UPDATE tableA
SET column_a = REPLACE(column_a, 'conserve', 'fixed'),
column_a = REPLACE(column_a, 'balance', 'moderate'),
...
不确定不使用 CASE 的原因是什么(因为我认为这是一个更有用的选项),但是 here's dbfiddle 有几个 UPDATE 语句的替代方案(REPLACE 和 CTE):
-- replace example
UPDATE tableA
SET
column_a = REPLACE(REPLACE(REPLACE
(column_a, 'conserve', 'fixed'),
'balance', 'moderate'),
'aggressive','moderate/agressive');
-- CTE example
UPDATE tableA
SET
column_a = tmp.tmp_val
FROM (
SELECT 'conserve' as tmp_key, 'fixed' as tmp_val
union select 'balance', 'moderate'
union select 'balance growth', 'moderate growth'
union select 'aggressive', 'moderate/agressive'
) tmp
WHERE tmp.tmp_key = tableA.column_a
;
我正在处理一个新项目并尝试更新单个列中的多行。似乎任何使用 CASE 语法的查询都会引发错误。我需要重写此查询,以便不使用 CASE 语法。感谢您的帮助,我有:
UPDATE tableA
SET
column_a = CASE WHEN column_a = 'conserve' THEN 'fixed'
WHEN column_a = 'balance' THEN 'mod'
WHEN column_a = 'balance growth' THEN 'mod growth'
WHEN column_a = 'aggressive' THEN 'mod/agressive'
END;
我在我们的管道中看到的错误是:
Caused by: liquibase.exception.DatabaseException: ERROR: syntax at or near "column_a"
我正在寻找在更新单个列中的多行时使用 CASE 的替代方法。
我会像下面这样写这个查询。这不是很漂亮,但应该完成工作。
UPDATE tableA
SET column_a = REPLACE(column_a, 'conserve', 'fixed'),
column_a = REPLACE(column_a, 'balance', 'moderate'),
...
不确定不使用 CASE 的原因是什么(因为我认为这是一个更有用的选项),但是 here's dbfiddle 有几个 UPDATE 语句的替代方案(REPLACE 和 CTE):
-- replace example
UPDATE tableA
SET
column_a = REPLACE(REPLACE(REPLACE
(column_a, 'conserve', 'fixed'),
'balance', 'moderate'),
'aggressive','moderate/agressive');
-- CTE example
UPDATE tableA
SET
column_a = tmp.tmp_val
FROM (
SELECT 'conserve' as tmp_key, 'fixed' as tmp_val
union select 'balance', 'moderate'
union select 'balance growth', 'moderate growth'
union select 'aggressive', 'moderate/agressive'
) tmp
WHERE tmp.tmp_key = tableA.column_a
;