【问题标题】:Unable to get a JOIN work无法获得 JOIN 工作
【发布时间】:2015-10-17 18:33:37
【问题描述】:

我有这两张桌子。第一个表包含总线信息。第二个表是多值的,包含上述巴士的所有站,巴士将在这些站停靠/接送乘客。

问题陈述

假设有两辆公共汽车 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;

正如我所说,查询有时有效,但大多无效。我究竟做错了什么??感谢您的任何意见。

【问题讨论】:

  • 您在 sqlfiddle 中加载样本的地方,我们将拥有真正的设计和一些数据来玩
  • 在过去一年左右的时间里,您还有 3 个问题的答案。似乎您要么没有将它们带到已回答的绿色复选标记状态,要么没有完成关于它们为什么不起作用的想法,或者其他什么。这就是我们在这里滚动的方式
  • 您使用的是group by,但SELECT 中的大部分列都没有聚合函数。因此,您会得到不确定的值。

标签: mysql sql


【解决方案1】:

我写了以下内容:

我的场景是一个人从 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

【讨论】:

    猜你喜欢
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2012-06-14
    • 2023-03-12
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多