2015-12-08 73 views
0

我需要從3個表中獲取數據。但是,只要有2個表格,我就只能得到正確的結果。只要我加入第三個表格,我就會得到空結果。其工作方式查詢:MySQL左連接3表不產生結果

select a.first_name,a.last_name,a.email, a.birthdate,b.mobile_phone 
from REGISTRATION a 
left join TRIPS b on a.trip_id=b.trip_id 
where a.trip_id=9 and registration_status='Active' 

然而,當我使用以下查詢來獲取從第3表中的數據,我得到空的結果:

select a.first_name,a.last_name,a.email, a.birthdate,b.mobile_phone,d.country_name 
from REGISTRATION a 
left join TRIPS b 
on a.trip_id=b.trip_id and registration_status='Active' 
left join DESTINATION_COUNTRY d 
on b.destination_country_id=d.destination_country_id 
where a.trip_id=9 

請諮詢我什麼,我做錯了。

非常感謝。

+1

沒有什麼錯在這裏。 – Strawberry

+0

定義「獲得空結果」。在你得到零結果返回?或者你會得到空值的結果? –

+0

這些是根本不同的查詢,因爲您已將全局謂詞「registration_status ='Active'」更改爲連接謂詞。所以這當然可以解釋得到空值。它不會解釋沒有返回結果。 –

回答

1

你應該加入刪除此「和REGISTRATION_STATUS =‘活動’」,並將其移動到WHERE子句:

select a.first_name,a.last_name,a.email, a.birthdate,b.mobile_phone,d.country_name 
from REGISTRATION a 
left join TRIPS b 
on a.trip_id=b.trip_id 
left join DESTINATION_COUNTRY d 
on b.destination_country_id=d.destination_country_id 
where a.trip_id=9 and registration_status='Active' 
+0

非常感謝。這工作。你能解釋一下WHERE子句的位置和registration_status ='Active'的區別嗎?謝謝。 – Roshni

+1

當你把這個條件「和registration_status ='Active'」作爲左連接時,你會得到空結果,因爲無論連接條件如何,你都會得到所有左邊的行,但是當左連接時,你會得到所有的結果。到你的左連接,然後你將「and registration_status ='Active'」條件作爲一個表應用於所有結果(導致左連接)。 –