自分自身から選択したクエリに基づいてテーブルを更新したいと思います。このようなテーブルから出発自分自身でクエリを実行してテーブルを更新する
__________________________
| id | uid | uid_seq_no |
--------------------------
| 1 | a | NULL |
| 2 | a | NULL |
| 3 | b | NULL |
| 4 | a | NULL |
| 5 | b | NULL |
| 6 | b | NULL |
| 7 | a | NULL |
| 8 | c | NULL |
--------------------------
Iは、行のシーケンス番号にuid_seq_no
を更新したいuid
にスコープは、最終的な結果は、となるように:
__________________________
| id | uid | uid_seq_no |
--------------------------
| 1 | a | 1 |
| 2 | a | 2 |
| 3 | b | 1 |
| 4 | a | 3 |
| 5 | b | 2 |
| 6 | b | 3 |
| 7 | a | 4 |
| 8 | c | 1 |
--------------------------
私が実行しようとしています
UPDATE keySeq a
SET uid_seq_no=(
SELECT IFNULL(uid_seq_no,0)+1 FROM keySeq b
WHERE a.uid = b.uid AND uid_seq_no IS NOT NULL
ORDER BY id
LIMIT 1
);
私は:Table 'a' is specified twice, both as a target for 'UPDATE' and as a separate source for data
を取得します。
UPDATE keySeq a
SET uid_seq_no=(
SELECT n FROM (
SELECT IFNULL(uid_seq_no,0)+1 AS n FROM keySeq b
WHERE a.uid = b.uid AND uid_seq_no IS NOT NULL
ORDER BY id
LIMIT 1
) AS T
)
しかし、私はUnknown column 'a.uid' in 'where clause'
を取得します。サブサブクエリにはクエリスコープへのアクセスがないためです。
今私はアイデアがありません。
サンプルテーブル:http://sqlfiddle.com/#!9/e3f3b6/1