2
假設下表:在同一個表中更新多行有記錄的第一個實例
+----+-----------+
| id | session |
+----+-----------+
| 1 | abcd1234 |
| 2 | abcd1234 |
| 3 | abcd1234 |
| 4 | qwert5678 |
| 5 | qwert5678 |
| 6 | abcd1234 |
| 7 | abcd1234 |
| 8 | qwert5678 |
| 9 | abcd1234 |
| 10 | qwert5678 |
| 11 | qwert5678 |
| 12 | qwert5678 |
+----+-----------+
假設我們希望得到一個給定的會話的第一個ID,則該會話的每個實例設置爲ID 爲所有會議,使得表變爲:
+----+-----------+
| id | session |
+----+-----------+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 4 |
| 5 | 4 |
| 6 | 1 |
| 7 | 1 |
| 8 | 4 |
| 9 | 1 |
| 10 | 4 |
| 11 | 4 |
| 12 | 4 |
+----+-----------+
我們有大約45M記錄表,基本上改變柱的每個實例b,以最小的值(列)當b列分組。
有沒有辦法在單個查詢中做到這一點?我們嘗試了幾次。
update example e
set session =
(select id from
(select id,min(session)
from example as first_id
group by session
) as this_id
);
......哪個出錯:「子查詢返回多於一行」。
update example e
join
(select id
from
(select id,min(session)
from example as first_id
group by session
) as this_id
) as etable
set session = first_id;
......哪個出錯:「字段列表」中的未知列'first_id'。也使用'this_id'來達到同樣的效果。
等查詢。這可能在一個單一的查詢?我們是否錯誤地考慮了這個問題?
你們是不是要更新您從中選擇值相同的表?這恐怕是不允許的。 – 2013-02-28 20:30:49
爲管理目的,你可以創建一個列,你可以添加最小會話ID在插入後,選擇MIN會話ID後 – 2013-02-28 20:35:51