2014-06-27 56 views
0

新到MySQL(从Oracle推出),我有这个UPDATE:MySQL的UPDATE和CASE

UPDATE the_table 
SET the_col = 'the_value', 
    the_col2 = CASE WHEN the_col = 'the_value' THEN 'x' ELSE 'y' END 
WHERE a = 1; 

的想法是,如果the_col设置为 'the_value' the_col2设置为 'X',否则设置它到'y'。

我所看到的是the_col正在更新,但the_col2。

我没有收到错误报告,所以我假设语法/用法是确定的。

就好像“SET the_col ='the_value'”设置值,以便在CASE中引用它时具有新值。我认为这不太可能,但这似乎是发生了什么。

我想要做的是测试更新前的列值。

+0

如果反转SET的顺序会怎样? – Tom

+0

*如果the_col设置为'the_value',则将the_col2设置为'x'*但查询中所有记录的情况如此 –

+0

@OP:语法正确。价值将被预先设定,并应该工作。你正在使用哪个版本? –

回答

0

我不认为the_col有新的价值,当你做了一套the_col2情况下...

但一个办法,找出 - 运行更新两次,做the_col,然后the_col2。注意:要创建一个临时测试表(因为您是MySQL的新手,可能会有所不同),a)运行DESCRIBE your_table; b)使用CREATE TABLE temp_table中的值; c)创建一个子查询读出your_table中的所有行并将它们插入temp_table - 例如INSERT到temp_table值(从表中选择*)。祝你好运。

+0

谢谢。这些奇怪的事情之一。最后,我采取了创造一个触发器来解决这个问题。 – TenG