2017-09-27 75 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約束也是可以的)。