MW211 EXIT

devlog
MySQL/更新時における自身のサブクエリ
2017年07月29日
例えば、並び順を末尾に追加したい場合、現状の最大値+1を更新するようにするとする。

ただ、以下だとエラー(1093エラー)となる。
┌──────────────────────────────────────┐
│INSERT INTO `表`                                                            │
│    SET `列` = 値,                                                          │
│        `順` = (SELECT MAX(`順`) + 1                                        │
│                    FROM `表`);                                             │
└──────────────────────────────────────┘

サブクエリに自らの表を使用できないのが原因だ。
この場合、以下のように別表にしてしまえば、これを回避できる。
┌──────────────────────────────────────┐
│INSERT INTO `表`                                                            │
│    SET `列` = 値,                                                          │
│        `順` = (SELECT `順` + 1                                             │
│                    FROM (                                                  │
│                        SELECT MAX(`順`) AS `順`                            │
│                            FROM `表`                                       │
│                    ) AS `別表`);                                           │
└──────────────────────────────────────┘
分類:MySQL