Sql server SQL以不同的方式连接相同的列

Sql server SQL以不同的方式连接相同的列,sql-server,join,Sql Server,Join,如果时区偏差代码StartUTC和EndUTC在两个条件之间(即StartUTC可能是5:00,EndUTC可能是10:00,我想要BookingDate在StartUTC和EndUTC之间的时区偏差值),则此代码正确吗要回答您的第一个问题(仅凭逻辑),您可以使用BETWEEN语句,使您的意图更加清晰。BETWEEN是包含的,这意味着它在比较中包含范围任意一端的值: inner join REZNVOD01.dbo.TimeZoneVariation tzv on tzv.Time

如果时区偏差代码StartUTC和EndUTC在两个条件之间(即StartUTC可能是5:00,EndUTC可能是10:00,我想要BookingDate在StartUTC和EndUTC之间的时区偏差值),则此代码正确吗

要回答您的第一个问题(仅凭逻辑),您可以使用BETWEEN语句,使您的意图更加清晰。BETWEEN是包含的,这意味着它在比较中包含范围任意一端的值:

 inner join 
     REZNVOD01.dbo.TimeZoneVariation tzv on tzv.TimeZoneCode = s.TimeZoneCode 
                                         and tzv.EndUTC >= BookingDate
                                         and tzv.StartUTC <= BookingDate
但是,您没有澄清“BookingDate”是“f”中的字段还是变量。如果它是一个变量,请确保在它前面加上@的广告词,如果它来自“f”,请声明它是这样的(例如f.BookingDate)。这种做法将使您的代码对阅读它的人更清晰

至于你最后的问题。。。拼写出表别名而不是太多地缩写它们可能是有益的(我喜欢将行分解并进行缩进以帮助可视化联接关系):

我不太明白你的最后一个问题。请你再说一遍好吗


谢谢

这是一个很好的起点。哦,谢谢@SeanLange。。。这将对我在未来的帖子中以及帮助他人解决问题非常有益。谢谢你的链接!明白了,我试着用between,但我想我用错了,所以这很有效。谢谢虽然这是一个很好的答案,但在使用BETWEEN时,尤其是在使用datetime值时,您需要格外小心。
 inner join 
     REZNVOD01.dbo.TimeZoneVariation tzv on tzv.TimeZoneCode = s.TimeZoneCode 
                                         and tzv.EndUTC >= BookingDate
                                         and tzv.StartUTC <= BookingDate
 INNER JOIN REZNVOD01.dbo.TimeZoneVariation tzv
   ON tzv.TimeZoneCode = s.TimeZoneCode AND
      BookingDate BETWEEN tzv.EndUTC AND tzv.StartUTC
SELECT TOP 1000
  f.*,
  origStation.TimeZoneCode AS TimeZoneOrigin,
  destStation.TimeZoneCode AS TimeZoneDestination,
  origTz.StandardVariation AS VariationOrigin,
  destTz.StandardVariation AS VariationDestination,
  origTzv.Variation AS TimeVariationOrigin,
  destTzv.Variation AS TimeVariationDestination
FROM
  REZNVWB01.MIT.HVResearchDataSetDraft1 AS f
    INNER JOIN REZNVOD01.dbo.Station AS origStation
      ON origStation.StationCode=f.TripOriginLocationCode 
    INNER JOIN REZNVOD01.dbo.Station AS destStation
      ON destStation.StationCode=f.TripDestinationLocationCode 
    INNER JOIN REZNVOD01.dbo.TimeZone AS origTz
      ON origTz.TimeZoneCode=origStation.TimeZoneCode
    INNER JOIN REZNVOD01.dbo.TimeZone AS destTz
      ON destTz.TimeZoneCode=destStation.TimeZoneCode
    INNER JOIN REZNVOD01.dbo.TimeZoneVariation AS origTzv
      ON origTzv.TimeZoneCode = origStation.TimeZoneCode AND
         f.BookingDate BETWEEN origTzv.EndUTC AND origTzv.StartUTC
    INNER JOIN REZNVOD01.dbo.TimeZoneVariation AS destTzv
      ON destTzv.TimeZoneCode = destStation.TimeZoneCode AND
         f.BookingDate BETWEEN destTzv.EndUTC AND destTzv.StartUTC