sql >> データベース >  >> RDS >> Mysql

MySQLクエリ結果に見つからない値を含める

    left join 正しいですが、typesが必要です 最初に:

    SELECT DISTINCT types.type, owners.name, owners.city
    FROM tbl_pet_types types LEFT JOIN
         tbl_pet_owners owners
         ON owners.pet = types.pet
    WHERE types.type IN ('mammal', 'fish', 'amphibian', 'seacreature');
    

    WHERE 句はtbl_pet_typesのみを参照します 、変更されません。

    left joinの方法 動作は単純です。すべての行を最初のに保持します。 テーブル。 2番目の一致しない列はNULLになります 。

    編集:

    tbl_pet_typesにないタイプのリストがある場合 、次にleft joinが必要です 派生テーブルのすべての値を使用:

    SELECT DISTINCT tt.type, po.name, po.city
    FROM (SELECT 'mammal' as type UNION ALL
          SELECT 'fish' as type UNION ALL
          SELECT 'amphibian' as type UNION ALL
          SELECT 'seacreature' as type 
         ) tt left join
         tbl_pet_types pt
         ON pt.type = tt.type LEFT JOIN
         tbl_pet_owners po
         ON po.pet = pt.pet;
    


    1. MySQL-SELECT ... WHERE id IN(..)-正しい順序

    2. EntityFrameworkモデルを複数のデータベースにまたがらせる

    3. OracleにSKIPLOCKEDでTOPN行を返すように強制します

    4. 一度に固定数の結果でMySqlResultSetをストリーミング