考慮下表T
在SQL刪除數據庫元素時,調節組合鍵
------------------------------
| CountryID | Obs | Event |
------------------------------
| 1 | 1 | 10 |
| 1 | 2 | 20 |
| 1 | 3 | 30 |
| 2 | 1 | 20 |
| 2 | 2 | 30 |
| 2 | 3 | 10 |
| 3 | 1 | 30 |
| 3 | 2 | 10 |
| 3 | 3 | 20 |
------------------------------
我想刪除所有行,Event = 20
不過,我會再要更新的Obs
使他們仍然在增加從1級與1
的差異。例如,如果我跑SELECT * FROM T WHERE Event != 20
,我會得到
------------------------------
| CountryID | Obs | Event |
------------------------------
| 1 | 1 | 10 |
| 1 | 3 | 30 |
| 2 | 2 | 30 |
| 2 | 3 | 10 |
| 3 | 1 | 30 |
| 3 | 2 | 10 |
------------------------------
而是我想
------------------------------
| CountryID | Obs | Event |
------------------------------
| 1 | 1 | 10 |
| 1 | 2 | 30 |
| 2 | 1 | 30 |
| 2 | 2 | 10 |
| 3 | 1 | 30 |
| 3 | 2 | 10 |
------------------------------
查詢什麼,我需要做到這一點?
(1)用你正在使用的數據庫標記你的問題。 (2)這真的有必要嗎?您可以在需要時計算'Obs',而不是將其存儲在數據庫中。識別行的最佳方式是通過身份/自動遞增/序列列。 –
爲什麼要更新'Obs'?爲什麼不在需要時查詢順序值? – Mureinik
我需要這個的原因是因爲我後來需要一個'T作爲x內聯接作爲y ON(x.CountryID = y.CountryID和x.Obs = y.Obs + 1)'' – rwolst