2016-06-30 8 views
-1

私は左のジョインを使用しており、非常に便利であることがわかりました。今日、私は右側のNULLが表示されていない問題に遭遇しました。二番目の表は以下の通りであるscheme_categoryあるMysqlの左ジョインでNULLを使用する

id name 
1  ROR 
2 Mutation 
3 Partition 

:期間2016分の3について

id scheme_id category_id period 
1  12    1   3/2016 
2  12    2   3/2016 
3  12    1   4/2016 
4  12    2   4/2016 
5  12    3   4/2016 
6  12    1   5/2016 
7  12    3   5/2016 

、値が同様CATEGORY_ID 3について存在しない最初のテーブルは以下の通りであるカテゴリあります、期間5/2016の場合、category_id 2の値は存在しません。scheme_categoryテーブルに存在しないカテゴリがNULLとして表示されるように、カテゴリおよびscheme_categoryテーブルを使用してクエリを作成しました。

select category.name, period 
from category 
    left join scheme_category on category.id= scheme_category.category_id 

しかし、このクエリはNULLとしてフィールドを表示していません。この点についてご案内ください。

+1

これは正しいです。あなたのscheme_categoryテーブルにすべての異なるカテゴリの値が含まれているため、新しい値をカテゴリに挿入しようとすると、nullレコードが返されます –

+1

このクエリは、サンプルデータのフィールドとしてNULLを表示しません。 – Blank

+0

ソリューションのために、このクエリを試してください: 'category.nameを選択し、期間、私はかなりいつかのためにそれを試した後、ここで質問を入れているcategory.id = scheme_category.category_id' –

答えて

1

問題は、カテゴリIDのみで結合し、カテゴリIDが一致することです。カテゴリid - periodのペアの完全なリストを持っていて、このリストのscheme_categoryテーブルに参加する必要があります。

ピリオドを一覧表示する別のピリオドテーブルを作成するか、またはscheme_categoryテーブル自体からピリオドの一覧を取得します。その後、ピリオドとカテゴリIDのリストの間にデカルト結合を作成し、このデータセットをscheme_categoryテーブルに結合したままにします。第二のオプションは、より複雑であるので

は、私はそのためのサンプルコードを提供します:私はphpMyAdminにしてあなたに似た2つのテーブルを作成し

select 
from 
    (select distinct period from scheme_category) t1 
join 
    category --note that there is no join condition -> creating a Cartesian join 
left join 
    scheme_category on t1.period=scheme_category.period and category.id=scheme_category.category_id  
+0

おかげであなたの助けになりました。私はあなたの答えを受け入れるでしょう。 – John

-1

。 私のクエリは次のようになります。

SELECT category.name, scheme_category.peroid 
FROM `scheme_category` 
LEFT JOIN category 
ON category.id = scheme_category.category_id 

...そしてそれは私を与える:

name | peroid 
ROR | 3/2016 
Mutation | 3/2016 
ROR |4/2016 

だから、良い作品。

+0

問題は、OPがクエリが動作するかどうかではなく、OPが期待する 'ヌル'を見ていない理由でした。 –

関連する問題