CASE ステートメントを使用してクエリ構造自体を変更することはできません。データを返すだけで、関数です。
What you have ( ) は、フィールドまたはフィールドの値を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'
編集:*
の代わりに別のテーブルの値を使用するには、次の'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=?