2011-10-17 204 views
1

我有一個表中的主鍵是兩列的組合。我想更新多個行,這取決於我的主鍵多個更新查詢mysql

StationId ServerDate   Status 
1   2011-05-05 01:00:00 0 
1   2011-05-06 01:00:00 1 
2   2011-05-05 01:00:00 2 

我的更新查詢目前看起來像

Update data set status = 1 where StationId = '1' and ServerDate = '2011-05-05 01:00:00' 
Update data set status = 2 where StationId = '1' and ServerDate = '2011-05-06 01:00:00' 

我想用CASE聲明,但對如何使用它時,鑰匙無法弄清楚是兩個鍵的組合。這是我用CASE寫的查詢。它改變了我所有的行。如果當前記錄在記錄3等條件下沒有出現,則其更改爲默認值0.我希望該記錄保留以前的值。

UPDATE data set status = CASE 
    WHEN StationId = '1' and ServerDate = '2011-05-05 01:00:00' THEN 1 
    WHEN StationId = '1' and ServerDate = '2011-05-06 01:00:00' THEN 2 
END 

回答

0

當您處理多行時,您可以使StationId更快地查詢您的索引。

mysql>CREATE INDEX index_name ON tableName(StationId); 
+1

由於StationId和ServerDate是組合主鍵我不認爲我需要索引我的StationId。我將一直使用StationId和ServerDate的組合進行搜索。而且我不想通過多個步驟進行更新。我只想使用一個查詢進行更新 –

3

這是我使用CASE寫的查詢,但我查詢了錯誤

END關鍵字後刪除 「CASE」,它應該是罰款:

UPDATE data 
    SET status = 
    CASE 
     WHEN stationId = '1' and ServerDate = '2011-05-05 01:00:00' THEN 1 
     WHEN stationId = '1' and ServerDate = '2011-05-06 01:00:00' THEN 2 
     WHEN stationId = '2' and ServerDate = '2011-05-05 01:00:00' THEN 3 
    END 
WHERE stationId IN ('1', '2') 
    AND ServerDate in ('2011-05-05 01:00:00', '2011-05-06 01:00:00') 
+0

對於不存在任何WHEN情況下的記錄,將其設置爲默認值。我如何阻止? –

+0

您需要一個WHERE子句來限制行。查看我的編輯 –

+0

在這種情況下,如果我需要更新記錄2和記錄3這兩個不同StationIds的記錄,那我該怎麼辦? –

2

您的查詢應爲:(EDITED)

UPDATE data set status = 
(
    CASE 
     WHEN StationId = '1' AND ServerDate = '2011-05-05 01:00:00' THEN 1 
     WHEN StationId = '2' AND ServerDate = '2011-05-06 01:00:00' THEN 2 
    END 
) 
WHERE StationId IN ('1','2') 
2

你只需要刪除你最後一個「CASE」

UPDATE data set status = CASE 
    WHEN StationId = '1' and ServerDate = '2011-05-05 01:00:00' THEN 1 
    WHEN StationId = '1' and ServerDate = '2011-05-06 01:00:00' THEN 2 
END 
+0

Yaa我現在已經清除了這個錯誤。手冊位於[CASE](http://dev.mysql.com/doc/refman/5.0/en/case-statement。html)最終有CASE。現在我有另一個問題。我編輯了我的問題。看一看 –