2015-10-17 242 views
0

我有這兩個表。第一張表包含巴士信息。第二表是多值,並且包含全部上述公共汽車的車站,在那裏公共汽車將停下來揀選乘客。無法獲得JOIN工作

問題陳述

假設有兩輛公交車B1B2具有相同的目標。如果用戶選擇站s1,我希望顯示上面的總線。下面是表結構和我使用的查詢(查詢有時工作,但其他時間不)

表設計

Table 1 
======= 
BusId Source Destination DepartureTime 

Table 2 
======= 
BusId StationName ArrivalTime DepartureTime 

SELECT 
    b.BusId, b.BusNo, b.Source, b.Destination, b.SrcDepartureTime 
    AS SrcDepTime, b.DstArrivalTime AS DstArrTime, bs.StationName, 
    bs.ArrivalTime AS StationArrTime, bs.DepartureTime AS StationDepTime, 
FROM 
    Buses b, BusStations bs 
WHERE (b.BusId = bs.BusId) AND (b.Source = **passenger_source** OR bs.StationName = **passenger_source** OR bs.StationName = **passenger_dest**) AND ((DATE(b.SrcDepartureTime) = '2015-10-17') AND (DATE(bs.DepartureTime) = '2015-10-17')) GROUP BY bs.BusId; 

正如我所說的,有時查詢工作,但大多沒有。我究竟做錯了什麼??感謝您的任何意見。

+0

,你加載在sqlfiddle一個示例中,我們將有真正的設計和一些數據與 – Drew

+0

玩,你也有在去年3個問題的答案給他們或者。看起來好像你沒有把他們帶到綠色複選標記的狀態,或者完成你爲什麼不工作的想法等等。這就是我們在這裏滾動的方式 – Drew

+1

您正在使用「group by」,但「SELECT」中的大多數列沒有聚合函數。因此,你會得到不確定的值。 –

回答

0

我寫了下面的:

我的方案是從人站X出發,想要去的目的地y,則顯示,停在站X的所有公交車,去到目的地爲Y指定的時間。

我使用了相同的列名,所以應該很容易看到我所做的。

declare @goingto as nvarchar(50) 
declare @goingfrom as nvarchar(50) 
declare @time as datetime 

set @goingto = 'Basingstoke' 
set @goingfrom = 'Winchester' 
set @time = '2015-10-17 18:50:00.000' 

select i.BusID,i.Source,i.Destination,s.StationName,s.DepartureTime from BusInfo i 
left join BusStops s on i.BusID = s.BusID 
where i.Destination = @goingto and s.StationName = @goingfrom 
and s.DepartureTime = @time 

數據:

Table Bus Info 
1 Southampton Basingstoke 2015-10-17 00:00:00.000 
2 Portsmouth Basingstoke 2015-10-17 00:00:00.000 
3 Bristol   Winchester 2015-10-16 00:00:00.000 
4 Winchester Bristol   2015-10-16 00:00:00.000 


Table Bus Stops 

1 Winchester 2015-10-17 12:00:00.000 2015-10-17 18:50:00.000 
1 Basingstoke 2015-10-17 19:00:00.000 2015-10-17 19:10:00.000 
1 RedBridge 2015-10-17 21:00:00.000 2015-10-17 21:10:00.000 
2 Winchester 2015-10-17 12:00:00.000 2015-10-17 18:50:00.000 
3 Basingstoke 2015-10-17 19:00:00.000 2015-10-17 19:10:00.000 
2 Southampton 2015-10-17 17:50:00.000 2015-10-17 18:50:00.000