質問: 下記のような2つのテーブルからデータを取得する時にテンプレートに紐付いているカテゴリーが1つも存在しないカテゴリーデータも取得したいのですがどのようにすればいいのでしょうか? できれば1回のクエリで取得したいと考えています。 ○カテゴリーtbl id| カテゴリー名|削除フラグ 1 | カテゴリー1 |0 2 | カテゴリー2 |0 3 | カテゴリー3 |0 ○テンプレートtbl id| カテゴリーid| テンプレート名| 削除フラグ 1 | 1 | テンプレート1 |0 2 | 1 | テンプレート2 |0 3 | 2 | テンプレート3 |0 4 | 2 | テンプレート3 |1 --- ■理想の取得データ テンプレートid| カテゴリーid |テンプレート名 1 | 1 |テンプレート1 2 | 1 |テンプレート2 3 | 2 |テンプレート3 NULL | 3 |NULL よろしくお願いいたします。
回答: テーブルを作ります。 ``` CREATE TABLE `category` ( `id` int(11) NOT NULL, `categor_name` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `template` ( `id` int(11) NOT NULL, `category_id` int(11) DEFAULT NULL, `template_name` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` データをインサートします。 ``` INSERT INTO `category` (`id`,`categor_name`) VALUES (1,'カテゴリー1'); INSERT INTO `category` (`id`,`categor_name`) VALUES (2,'カテゴリー2'); INSERT INTO `category` (`id`,`categor_name`) VALUES (3,'カテゴリー3'); INSERT INTO `template` (`id`,`category_id`,`template_name`) VALUES (1,1,'テンプレート1'); INSERT INTO `template` (`id`,`category_id`,`template_name`) VALUES (2,1,'テンプレート2'); INSERT INTO `template` (`id`,`category_id`,`template_name`) VALUES (3,2,'テンプレート3'); ``` 検索文は下記の通りです。 ``` SELECT template.id, category.id, template_name FROM category LEFT JOIN template ON category.id = template.category_id ``` LEFT JOINについてここに参照してください。