不能使用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'
编辑:*
要使用从值另一张桌子,而不是只是'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=?
谢谢德姆斯,为快速回复。 – htrufan 2012-07-12 09:05:19
如何处理一些小技巧,而不是'x',我使用'(从table2中选择字段,其中a = 1和b = 2 c = ...)'。有没有办法做到这一点,而不必指定相同的大选择两次? – htrufan 2012-07-12 09:08:36
看起来Oracle不喜欢“update set from”,但这个[link](http://luckylarry.co.uk/programming-tutorials/oracle/oracle-update-from-equivalent/)的方法似乎使它快乐。 – htrufan 2012-07-12 11:47:12