MW211 EXIT

devlog
SQL/呉越同舟?
2011年08月30日
1対nの関係にある親子テーブルを結合して、子IDで親子両方の名称を取得する場合に
以下のようなSQL文となる(各IDは主キーとする)。
┌──────────────────────────────────────┐
│SELECT 親.名称,                                                             │
│       子.名称                                                              │
│    FROM 親,                                                                │
│         子                                                                 │
│    WHERE 親.親ID = 子.親ID                                                 │
│      AND 子.子ID = {子ID};                                                 │
└──────────────────────────────────────┘
一方、m対nの関係にある場合は上記SQL文では、複数のレコードが該当してしまう。
しかし、子IDに加えて親IDもわかっている場合には、
以下のようなSQL文で一意にレコードを取得できる。
┌──────────────────────────────────────┐
│SELECT 親.名称,                                                             │
│       子.名称                                                              │
│    FROM 親,                                                                │
│         子                                                                 │
│    WHERE 親.親ID = {親ID}                                                  │
│      AND 子.子ID = {子ID};                                                 │
└──────────────────────────────────────┘
全然別の一意情報を結合しただけだが、
1件×1件の直積は1件という単純な法則は結構使えるかも。
分類:SQL