我是Web开发的新手,现在我正致力于聊天任务。 我有消息表来保存两个用户之间的对话。 现在我想删除单个消息,如果一个用户删除它,但是第二个用户可以看到此消息,直到第二个用户为此删除消息我有两列来管理删除条件但是当我运行我的sql查询时它给了我真实但是db列未更新。列的默认值为0(零)。下面是我正在使用的SQL查询。
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
任何人都可以帮忙解决这个问题。
提前致谢
答案 0 :(得分:1)
COALESCE
适用于null
和not null
值。如果您想与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 。
答案 1 :(得分:0)
默认值(0)与update语句无关。我无法理解该查询中的逻辑......
首先,我不确定这些列的真实用法。有什么可能的价值观?如果行是否更新,那只是指示符吗?然后我无法理解为什么你在COALESCE中使用9600作为默认值。为什么不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 IS NULL的检查,因为即使存在DEFAULT约束,你仍然可以向该列插入NULL(当然,如果它可以为空)。