2013-08-06 112 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

我试过了,我的旅客列表不是空的。 –