

下記のような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

よろしくお願いいたします。


CC BY-SA 3.0
2016-12-07T03:27:24.333
30978
2016-12-07T06:02:05.690
2016-12-07T06:02:05.690
19522
19522
question
mysql
mysqlで2つのテーブルから紐付いていないデータも取得する


テーブルを作ります。

[code]

    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;
    
[/code]

データをインサートします。

[code]

    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');
    
[/code]

検索文は下記の通りです。

[code]

    SELECT 
        template.id,
        category.id,
        template_name
    FROM
        category
            LEFT JOIN
        template ON category.id = template.category_id
    
[/code]

[LEFT JOIN](http://www.w3schools.com/sql/sql_join_left.asp)についてここに参照してください。


CC BY-SA 3.0
2016-12-07T04:00:17.357
30979
2016-12-07T04:00:17.357
13152
30978
answer