2013-08-06 110 views
0

我試圖編寫一個查詢來顯示每個乘客的名字與他們的票價。 這裏是我到目前爲止什麼 - 它給沒有錯誤,也沒有任何結果:無法連接表

-- Write a query to display the Name of each passenger as well as the fare for their trip. 
select passenger.name, departure_info.fare * passenger.quantity AS passenger_fare 
from passenger, seat_passenger, manages, departure_info, seat_info 
where departure_info.Dept_id=manages.Dept_id 
AND manages.Seat_id=seat_info.Seat_id 
AND seat_info.Seat_id=seat_passenger.Seat_id 
AND seat_passenger.Pass_id=passenger.pass_id 

下面是使用正確的聯接語法,會使這個查詢從您的查詢的表http://i.imgur.com/R4EFthY.png

+1

考慮使用隱式連接和通過一次加入一個表,以確保啓動連接正確 –

+0

檢查您的表是否沒有記錄。 –

回答

1

的關係圖

select 
    p.name, di.fare * p.quantity as passenger_fare 
from passenger as p 
    inner join seat_passenger as sp on sp.pass_id = p.pass_id 
    inner join seat_info as si on si.seat_id = sp.seat_id 
    inner join manages as m on m.seat_id = si.seat_id 
    inner join departure_info as di on di.dept_it = m.dept_id 

我建議你把inner joinsleft outer joins,看看你錯過了什麼

select 
    p.name, di.fare * p.quantity as passenger_fare, 
    sp.pass_id, si.seat_id, m.seat_id, di.dept_id 
from passenger as p 
    left outer join seat_passenger as sp on sp.pass_id = p.pass_id 
    left outer join seat_info as si on si.seat_id = sp.seat_id 
    left outer join manages as m on m.seat_id = si.seat_id 
    left outer join departure_info as di on di.dept_it = m.dept_id 

事實上,你甚至可以刪除未使用的連接(如果你沒有錯過seat_info一些記錄):

select 
    p.name, di.fare * p.quantity as passenger_fare 
from passenger as p 
    inner join seat_passenger as sp on sp.pass_id = p.pass_id 
    inner join manages as m on m.seat_id = sp.seat_id 
    inner join departure_info as di on di.dept_it = m.dept_id 
+0

謝謝。查詢的運行方式與之前一樣,只是沒有結果顯示出來。我不明白爲什麼。以下是數據庫中的關係:http://prntscr.com/1jn80x我認爲它與該事情有關 –

+0

您是否嘗試過使用左外連接?如果它沒有返回任何行,它看起來像你的旅客列表是空的 –

+0

我試過了,我的旅客列表不是空的。 –