2011-12-05 12 views
1

2つの表の自己結合を使用して1つの結果行を戻す問合せがあります。私が持っている問題は、seat1が空であれば何も返されないということです。LEFT/RIGHT JOINが空の行を戻さない

SELECT seat1.seat_type_id 
    , seat1.seat_type_qty 
    , seat2.seat_type_id 
    , seat2.seat_type_qty 
    FROM jos_sv_apptpro2_requests AS R 
    LEFT JOIN jos_sv_apptpro2_seat_counts AS seat1 ON R.id_requests = seat1.request_id 
    LEFT JOIN jos_sv_apptpro2_seat_counts AS seat2 ON R.id_requests = seat2.request_id 
WHERE (seat1.seat_type_id = 6 AND seat2.seat_type_id = 7) 
    AND R.id_requests = 8703 
    AND R.resource = 3 

これは返す必要があります:

seat_type_id 6 
seat_type_qty 0 <= this is the empty row 
seat_type_id1 7 
seat_type_qty 1 

EDIT: 私が今持っている:

SELECT 
IFNULL(seat1.seat_type_qty,0) AS seat_type_qty, 
IFNULL(seat2.seat_type_qty,0) AS seat_type_qty 
FROM jos_sv_apptpro2_requests AS R 
LEFT JOIN jos_sv_apptpro2_seat_counts AS seat1 
ON R.id_requests = seat1.request_id AND seat1.seat_type_id = 6 
LEFT JOIN jos_sv_apptpro2_seat_counts AS seat2 
ON R.id_requests = seat2.request_id AND seat2.seat_type_id = 7 
WHERE R.id_requests = 8696 

REEDIT! - 私の誤りは、PHPのオブジェクトとしてseat_type_qtyを2回返すことです。今すぐソートされました - ありがとう!

答えて

3
WHERE seat1.seat_type_id = 6 AND seat2.seat_type_id = 7 

はNULL値を持つすべての行を削除するものです。あなたが結合条件にそれらの条件を移動する必要がありますので、RDBMSはあなたが期待している何をしていること:

LEFT JOIN jos_sv_apptpro2_seat_counts AS seat1 ON R.id_requests = seat1.request_id 
               AND seat1.seat_type_id = 6 
LEFT JOIN jos_sv_apptpro2_seat_counts AS seat2 ON R.id_requests = seat2.request_id 
               AND seat2.seat_type_id = 7 
+0

あなたは美人です!ありがとうございます - 有益なテクニックを知りたい – Jeepstone

+0

@Jeepstone:これは実際のテクニックではありません。一致しない場合にNULL値で行を塗りつぶし、すべての結合が実行された後にWHEREフィルターが適用されるのはOUTER JOIN操作です。 – Benoit

+0

私は理解しています。私は今何が間違っているのか分からないが、期待していたよりも結果が少なくなっている。 – Jeepstone

1
移動

あなたの句に参加するに:あなたはwhere句でそれらを持っている

LEFT JOIN jos_sv_apptpro2_seat_counts AS seat1 
    ON (R.id_requests = seat1.request_id) AND (seat1.seat_type_id = 6) 
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

、あなたは行全体と一致しています。 JOINでそれを行うと、結合されている特定のレコードに対してのみフィルタリングが実行されます。

関連する問題