MW211 EXIT

devlog
MySQL/ひとつだけ
2013年11月09日
所有者が一つだけしたデータを持てない状況の場合。

これから所有者を更新しようとする場合、既に所有者が他に持っていたら
NULLを更新するという条件付きのUPDATE文を考えた。

案1:COUNTして条件分岐する
┌──────────────────────────────────────┐
│UPDATE 表                                                                   │
│    SET 所有者 = (CASE (SELECT COUNT(*)                                     │
│                            FROM (SELECT * FROM 表) AS 一時表               │
│                            WHERE 所有者 = 値)                              │
│                    WHEN 0 THEN 値                                          │
│                    ELSE        NULL                                        │
│                  END)                                                      │
│    WHERE キー = キー値;                                                    │
└──────────────────────────────────────┘

案2:NOT EXISTSを使う
┌──────────────────────────────────────┐
│UPDATE 表                                                                   │
│    SET 所有者 = (SELECT 値                                                 │
│                      FROM DUAL                                             │
│                      WHERE NOT EXISTS (                                    │
│                                SELECT *                                    │
│                                    FROM (SELECT * FROM 表) AS 一時表       │
│                                    WHERE 所有者 = 値))                     │
│    WHERE キー = キー値;                                                    │
└──────────────────────────────────────┘
分類:MySQL