我有一個查詢,它使用2個表上的自聯接來返回單行結果。我遇到的問題是,如果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
編輯: 現在我已經得到了:
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
重新編輯! - 我的錯誤是,我在PHP中返回seat_type_qty兩次作爲對象。全部排序 - 謝謝!
你美麗!非常感謝 - 有用的技術知道 – Jeepstone
@Jeepstone:這不是一種真正的技術......它是如何加入工作!當沒有匹配時,OUTER JOIN操作填充具有NULL值的行,並且在所有連接執行完畢後應用WHERE過濾器。 – Benoit
我明白了。不知道現在我上面有什麼錯,但是我得到的結果比預期的要少。 – Jeepstone