2017-09-27 79 views
-1

我是Web开发新手,现在我正在开发聊天任务。 我有消息表来保存两个用户之间的对话。 现在我想删除单个消息,如果一个用户删除它,但这个消息将被第二个用户可见,直到第二个用户删除这条消息我有两列来管理删除条件,但是当我运行我的SQL查询,然后它给了我真实但db列未更新。该列的默认值是0(零)。以下是我正在使用的sql查询。MySQL不能在MySQL更新查询中工作

UPDATE messages 
SET delete_two = CASE WHEN delete_one > 0 THEN 9600 ELSE delete_two END, 
    delete_one = COALESCE(delete_one,9600) 
WHERE id = 367 

有人帮忙请解决这个问题。

在此先感谢上nullnot null

+0

您使用的是MySQL还是MS SQL Server? – jarlh

+2

什么没有更新? delete_one或delete_two? –

+0

@DmitrijKultasev两列由于默认值为零而不会更新 –

回答

1

COALESCE作品。如果你想与0比较,那么你需要使用IF,例如:

UPDATE messages 
SET delete_two = CASE WHEN delete_one > 0 THEN 9600 ELSE delete_two END, 
    delete_one = IF(delete_one = 0 , 9600, delete_one) 
WHERE id = 367 

这里的SQL Fiddle

0

默认值(0)与更新语句无关。我无法理解该查询中的逻辑...

首先,我不确定这些列的真实用法。那里有什么可能的价值?这只是指标,如果行更新或没有?然后我不明白为什么你在9600作为默认值COALESCE。为什么不是1?

另一件我不明白的事情是怎么会发生这样的情况,即在1条更新语句中更新2个用户的消息?这在逻辑上如何发生?

现在,让我们回归到您的查询,如果你仍然需要更新,那么:

UPDATE messages 
SET delete_two = CASE WHEN delete_one > 0 THEN 9600 ELSE delete_two END, 
    delete_one = CASE WHEN delete_one = 0 OR delete_one IS NULL THEN 9600 ELSE delete_one END 
WHERE id = 367 

我添加了检查delete_one因为你仍然能够插入NULL到该列(当然IS NULL如果即使有DEFAULT约束也是可以的)。