2017-09-26 104 views
0

如果第一列不为空,我想更新第二列值,否则更新最适合的列。下面是我有wriiten的查询,但这个查询给我的语法错误。下面是我的查询使用case语句更新MySql查询语法错误

UPDATE messages 
SET CASE WHEN delete_one IS NULL THEN delete_one = 9600 ELSE delete_two = 9600 END 
WHERE 
(message_to = 9600 AND message_from = 8625) 
OR 
(message_to = 8625 AND message_from = 9600); 

下面是我运行此查询

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'case when delete_one IS NULL THEN delete_one = 9600 ' at line 3 

请帮忙解决这个问题后,收到语法错误。

在此先感谢

+1

使用适当的DBMS的标签! Mysql和sql server不是一回事,而是使用不同的sql语言。 – SMor

+0

'update tablename set columnname = ...' – jarlh

回答

2

CASE表达式必须在SET右侧:

UPDATE messages 
SET delete_two = CASE WHEN delete_one IS NOT NULL THEN 9600 ELSE delete_two END, 
delete_one = COALESCE(delete_one,9600) 
WHERE 
(message_to = 9600 AND message_from = 8625) 
OR 
(message_to = 8625 AND message_from = 9600); 
0

尝试将其分配给CASE表达:

UPDATE messages 
SET delete_one = COALESCE(delete_one, 9600), 
    delete_two = CASE WHEN delete_one IS NULL THEN delete_two ELSE 9600 END 
WHERE 
    (message_to = 9600 AND message_from = 8625) OR 
    (message_to = 8625 AND message_from = 9600);