您不能使用 CASE 语句来更改查询结构本身。它只返回数据,它是一个函数。
您所拥有的 ( CASE WHEN input_field = 'draft' then id_draft ELSE id END
) 返回字段或字段中的值。好像在做这个...id
id_draft
UPDATE
yourTable
SET
CASE WHEN 'abc' = 'draft' THEN 123 ELSE 789 END = 'x'
相反,您需要将 CASE 语句放在右侧...
UPDATE
yourTable
SET
id = CASE WHEN input_field = 'draft' THEN id ELSE 'x' END,
id_draft = CASE WHEN input_field = 'draft' THEN 'x' ELSE id_draft END
但是,实际上,你这样做可能会更好......
IF (input_field = 'draft')
UPDATE yourTable SET id_draft = 'x'
ELSE
UPDATE yourTable SET id = 'x'
编辑:*
要使用另一个表中的值而不是 just 'x'
,您可以使用类似这样的东西......
UPDATE
yourTable
SET
id = CASE WHEN input_field = 'draft' THEN yourTable.id ELSE otherTable.x END,
id_draft = CASE WHEN input_field = 'draft' THEN otherTable.x ELSE yourTable.id_draft END
FROM
otherTable
WHERE
otherTable.a=? AND otherTable.b=?