2017-10-16 13 views
-1

私は2つのテーブルを持っています。私のクエリは以下を返します:左外部結合を使用してレコードが見つからない場合はNULLを返しません。

AUT | 0 

しかし、何も返されません。以下のことを試してみましたが、何も動作しません。

select substr(s.initial_group_code,1,3) as ko_tun, ifnull(count(s.id),0) 
from study_entitlement s 
left outer join graduation_status g on g.study_entitlement_id = s.id 
where g.graduation_status_date between str_to_date('01.01.2017', '%d.%m.%Y') 
    and str_to_date('31.01.2017', '%d.%m.%Y') 
and substr(s.initial_group_code,1,3) = 'AUT' 
group by substr(s.initial_group_code,1,3); 
select substr(s.initial_group_code,1,3) as ko_tun, count(s.id)+0 
from study_entitlement s 
left outer join graduation_status g on g.study_entitlement_id = s.id 
where g.graduation_status_date between str_to_date('01.01.2017', '%d.%m.%Y') 
    and str_to_date('31.01.2017', '%d.%m.%Y') 
and substr(s.initial_group_code,1,3) = 'AUT' 
group by substr(s.initial_group_code,1,3); 
select substr(s.initial_group_code,1,3) as ko_tun, COALESCE(count(s.id),0) 
from study_entitlement s 
left outer join graduation_status g on g.study_entitlement_id = s.id 
where substr(s.initial_group_code,1,3) = 'AUT' 
and g.graduation_status_date between str_to_date('01.01.2017', '%d.%m.%Y') 
    and str_to_date('31.01.2017', '%d.%m.%Y') 
group by substr(s.initial_group_code,1,3); 
+0

それがこれはどの伝えるために簡単ですので、エディタでコードをフォーマットしてください。 – kchason

+0

グループ「AUT」が実際にあなたのデータセットに存在することは確かですか?ここでカレンダーテーブルを使用するルートを移動する必要があります。 –

+0

ここでは、選択した列が両方ともベーステーブルにあり、外部結合テーブルではないという点で、この問題は発生していません。何もないことは何を意味するのですか? 3つのクエリが同じコードですべて異なる試みであると仮定していますか? – kchason

答えて

0

あなたのコードはかなり厄介であるので、一般的に、:テーブルが参加していないところはどこでも

SELECT 
    TblA.column1, 
    TblA.column2, 
    TblB.column3 
FROM 
    a AS TblA 
LEFT JOIN 
    b AS TblB 
    ON TblA.column4 = TblB.column4 

column3ためNULLになります(またはcolumn3の値があるNULL) 。

したがって、あなたはそれを変更するIF文を追加することができます。

SELECT 
    TblA.column1, 
    TblA.column2, 
    IF(TblB.column3 IS NULL, 0, TblB.column3) AS column3 
FROM 
    a AS TblA 
LEFT JOIN 
    b AS TblB 
    ON TblA.column4 = TblB.column4 

と言う「COLUMN3がnullの場合は、0に設定し、そうでない場合は、列の値を返します。」

0

外部テーブルのフィルタ条件をWHERE句からON句に移動する必要があります。それ以外の場合は暗黙的にINNER JOINに変換されます。このような

何かがあなたのために働く必要があります。

select substr(s.initial_group_code,1,3) as ko_tun, 
    count(g.study_entitlement_id) 
from study_entitlement s 
left outer join graduation_status g on g.study_entitlement_id = s.id 
    and g.graduation_status_date between str_to_date('01.01.2017', '%d.%m.%Y') 
    and str_to_date('31.01.2017', '%d.%m.%Y') 
where substr(s.initial_group_code,1,3) = 'AUT' 
group by substr(s.initial_group_code,1,3); 
+0

100万人のIke Walker氏に感謝します。実際には、ON句の最初のフィルタリング基準はありましたが、間違った列を数えていたことに気付かなかったのです。だからもう一度ありがとう:) –

関連する問題