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