次の表を想定します。
+----+-----------+
| 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 |
+----+-----------+
約 4,500 万レコードのテーブルがあり、基本的に、列 b でグループ化すると、列 b のすべてのインスタンスを min(列 a) の値に変更しています。
単一のクエリでこれを行う方法はありますか? 私たちはいくつか試しました。
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' も同じ効果で使用されます。
そして他のクエリ。これは単一のクエリで可能ですか? これについて私たちは間違って考えていますか?