2017-03-01 56 views
2

我有一個表像下表。用於查詢SQL UPDATE語句沒有ID取ID

我需要更新每一個沒有second_id線(second_id = 0)。

但是隻有狀態爲0和second_id的每一行都是0,然後我必須使用Record的最後一行second_id中的最後一個second_id值,並將此second_id作爲id並將其auto_increments添加到所有記錄中second_id = 0且狀態爲0

在下面的表格只記錄ID爲5將被更新,並且second_id 6(最後second_id 5 + 1)。

這是可能僅與SQL Statment?更新後

 
+------+------------+---------+---------+--------+ 
| id | second_id | y  | z  | status | 
+------+------------+---------+---------+--------+ 
| 1 |  3 |  ja | 1  | 0 | 
| 2 |  4 |  jaa | 2  | 0 | 
| 3 |  5 |  ja | 1  | 0 | 
| 4 |  0 | jaaa | 3  | 1 | 
| 5 |  0 |  jaa | 2  | 0 | 
| 6 |  0 | aaaaa | 2  | 0 | 
+------+------------+---------+---------+--------+ 

結果:

 
+------+------------+---------+---------+--------+ 
| id | second_id | y  | z  | status | 
+------+------------+---------+---------+--------+ 
| 1 |  3 |  ja | 1  | 0 | 
| 2 |  4 |  jaa | 2  | 0 | 
| 3 |  5 |  ja | 1  | 0 | 
| 4 |  0 | jaaa | 3  | 1 | 
| 5 |  6 |  jaa | 2  | 0 | 
| 6 |  7 | aaaaa | 2  | 0 | 
+------+------------+---------+---------+--------+ 
+0

您正在使用的數據庫? – Aducci

+0

我使用MySQL數據庫。 –

回答

0

下面的SQL將你所問的:

MS SQL:

DECLARE @I INT = (SELECT TOP 1 SECOND_ID FROM TESTTABLE ORDER BY SECOND_ID DESC) 

UPDATE TESTTABLE 
SET SECOND_ID = @I, @I = @I + 1 
WHERE SECOND_ID = 0 AND STATUS = 0 

的MySQL:

SET @I := (SELECT second_id FROM MyTable ORDER BY second_id DESC LIMIT 1); 

UPDATE MyTable 
SET second_id = @I := @I + 1 
WHERE second_id = 0 AND status = 0; 

對於單線解決方案,創建一個存儲過程。

DELIMITER $$ 

CREATE PROCEDURE RunIncrement() 
BEGIN 
DECLARE I = (SELECT second_id FROM MyTable ORDER BY second_id DESC LIMIT 1); 
UPDATE MyTable 
SET second_id = I := I + 1 
WHERE second_id = 0 AND status = 0; 
END$$ 

DELIMITER ; 

然後在需要時調用過程。

CALL RunIncrement(); 
+0

我怎樣才能把它放在一個陳述?我認爲這是兩個聲明還是? –

+0

@ wp-developer在您聲明這是MySQL之前,我回答了這個問題。我現在正在處理MySQL版本。 – Ethilium

+0

@ wp-developer我更新了包含MySQL的答案。我相信這是正確的語法,但我目前無法對其進行測試。 – Ethilium