自己外部結合

メモ。MySQL4.1.18

テーブル

 CREATE TABLE `tbl1` (
  `id` int(11) NOT NULL default '0',
  `role` varchar(100) NOT NULL default '',
  PRIMARY KEY  (`id`,`role`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

データ

+----+----------+
| id | role     |
+----+----------+
|  1 | mother   |
|  1 | teacher  |
|  1 | woman    |
|  2 | engineer |
|  2 | father   |
|  2 | man      |
|  3 | engineer |
|  3 | half     |
|  3 | son      |
+----+----------+

自己外部結合のSQL

SELECT
    A.id,
    A.role,
    B.role 
FROM tbl1 as A LEFT OUTER JOIN tbl1 as B ON A.id =B.id
     AND B.role = 'man' 
WHERE A.role = 'engineer';

結果

+----+----------+------+
| id | role     | role |
+----+----------+------+
|  2 | engineer | man  |
|  3 | engineer | NULL |
+----+----------+------+


なにがやりたかったかというと、
あるroleを機軸として、そのroleを持つidが他に兼ねているroleの状況(この場合はrole ='man')を知りたかったと。

プログラマのためのSQL 第2版
プログラマのためのSQL 第2版ジョー セルコ Joe Celko 秋田 昌幸

ピアソンエデュケーション 2001-04
売り上げランキング : 38,170


Amazonで詳しく見る
by G-Tools