2012-05-08 24 views
0

I現在、次のSQL文があります。表示nullは、行が見つからない場合

SELECT s.first_name, s.last_name, tgs.group_identifier 
FROM staff s 
JOIN staff_training st 
ON s.staff_id = st.staff_id 
JOIN training_group_staff tgs 
ON st.staff_training_id = tgs.staff_training_id 
WHERE st.staff_course_id = '164' 

training_group_staffのみが含まをstaff_training_idtraining_group_idこのステートメントは期待どおりに動作し、もちろん164に出席し、すべてのスタッフの名前を返します

ANDグループ(group_identifierフィールドで識別)に配置されています。

すべてのユーザーをトレーニングコース164に表示し、グループが選択されていない場合(特定のstaff_training_idの行がtraining_group_staffにない場合)、その列にnullを返します。

ビジュアル例

現在のステートメントの戻り値:私は返すようにしようとしています何

first_name | last_name | group_identifier 
Jim  | Jones  | 3 
Harry  | Jones  | 6 

は次のとおりです。

first_name | last_name | group_identifier 
Jim  | Jones  | 3 
Harriet | Smith  | NULL // No row in training_group_staff 
Harry  | Jones  | 6 

私が参加し、いくつかを試してみました、しかし同じを返すように見えますresults - 1つのクエリで可能な出力は?

答えて

2

LEFT JOINで試してください。あなたが何をしているのだろうか。

+0

スポットあり、ありがとうございました:) – lethalMango

1

2つのこと:

  1. は、値が空であるかどうかをチェックtraining_group_staffテーブル
  2. アンIF文を結ぶと

    SELECTのnullに設定するときに、明示的LEFT JOINを使用してみてください。 first_name
    、s.last_name
    、IF(tgs.group_identifier = ''、null、group_identifier)AS group_identifierスタッフの
    FROM はs.staff_id = st.staff_id
    左のST
    をstaff_training JOIN、JOIN training_group_staff TGS st.staff_training_id = tgs.staff_training_id
    ON
    WHERE sm.staff_course_id = '164'

+0

パーフェクト、ありがとう:) – lethalMango

1

使用outer joinsあなたはJOIN操作以下NULL S含める:

SELECT s.first_name, s.last_name, tgs.group_identifier 
FROM staff s 
JOIN staff_training st 
JOIN ON s.staff_id = st.staff_id 
LEFT OUTER JOIN training_group_staff tgs 
ON st.staff_training_id = tgs.staff_training_id 
WHERE st.staff_course_id = '164' 
+1

ありがとう、外側の結合を読み上げます – lethalMango

関連する問題