MW211 EXIT

devlog
内部結合と外部結合が複合する場合の罠
2011年08月29日
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM 表1,                                                               │
│         表2                                                                │
│    WHERE 表1.ID = 表2.ID;                                                  │
└──────────────────────────────────────┘
内部結合している表1と表2のうち、表1の方に表3を左外部結合したい場合
やってしまいがちなミス。
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM 表1,                                                               │
│         表2                                                                │
│    LEFT JOIN 表3 ON 表1.ID = 表3.ID                                        │
│    WHERE 表1.ID = 表2.ID;                                                  │
└──────────────────────────────────────┘
以下が正しい。
表1と表2の結合結果に表3を結合するのではなく、
表1と表3の結合結果に表2を結合するのが正しい。
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM 表1 LEFT JOIN 表3 ON 表1.ID = 表3.ID,                              │
│         表2                                                                │
│    WHERE 表1.ID = 表2.ID;                                                  │
└──────────────────────────────────────┘
表2に外部結合する場合は、前述でも順番的に問題ないので、
本来の仕様を勘違いしたままとなりやすい。
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM 表1,                                                               │
│         表2                                                                │
│    LEFT JOIN 表3 ON 表2.ID = 表3.ID                                        │
│    WHERE 表1.ID = 表2.ID;                                                  │
└──────────────────────────────────────┘
分類:SQL