如何编写此sql以使其易于理解

如何编写此sql以使其易于理解,sql,Sql,我已经读了10分钟以上的sql,但由于这一行,我无法理解它: SELECT BusLine.LineCode AS RouteID, BusStation.Station AS StartStation, BusStation_1.Station AS EndStation, BusStation_1.StationIndex - BusStation.StationIndex AS StopCount FROM BusLine AS BusLine_1 INNER JOI

我已经读了10分钟以上的sql,但由于这一行,我无法理解它:

SELECT  BusLine.LineCode AS RouteID,
  BusStation.Station AS StartStation, BusStation_1.Station AS EndStation,
  BusStation_1.StationIndex - BusStation.StationIndex AS StopCount
FROM  BusLine AS BusLine_1 
    INNER JOIN Area AS Area_1 
        ON BusLine_1.AreaID = Area_1.ID 
    INNER JOIN BusInfo AS BusInfo_1 
        ON BusLine_1.ID = BusInfo_1.BusLineID 
    INNER JOIN BusStation AS BusStation_1 
        ON BusInfo_1.ID = BusStation_1.BusInfoID 
    INNER JOIN 
        Area 
        INNER JOIN BusLine 
            ON Area.ID = BusLine.AreaID 
        INNER JOIN BusInfo 
            ON BusLine.ID = BusInfo.BusLineID 
        INNER JOIN BusStation 
            ON BusInfo.ID = BusStation.BusInfoID
        ON BusStation_1.StationIndex > BusStation.StationIndex AND   BusInfo_1.ID = BusInfo.ID
WHERE  (Area.City = 'NewYork') 
我想知道是否有人能解释它,并重新考虑它,使它容易理解


更新架构:

面积:

母线:

ID
Name
商业资讯:

ID
AreaID --> ID in Area
LineCode
公共汽车站:

ID
BusLineID --> ID in BusLine

顺便说一句,我正在使用访问权限,似乎我必须使用
()
来包装
innjer join

让您困惑的不是您突出显示的部分
内部连接区域
首先与上面的部分连接,因为下面的部分
内部连接母线位于Area.ID=BusLine.AreaID
上是带有子句的常规标准连接

如果(这是一个很大的如果)我正确地阅读了这个查询(离开纽约的公交线路有多少站),下面是我将尝试重构它的内容

BusInfoID --> ID in BusInfo 

请告诉我结果集是否相同

让你困惑的不是你突出显示的部分
内部连接区域
首先与上面的部分连接,因为下面的部分
内部连接母线位于Area.ID=BusLine.AreaID
上是带有子句的常规标准连接

如果(这是一个很大的如果)我正确地阅读了这个查询(离开纽约的公交线路有多少站),下面是我将尝试重构它的内容

BusInfoID --> ID in BusInfo 

请告诉我结果集是否相同

最初的作者考虑得足够周到,以一种指示连接在逻辑上如何相关的方式缩进SQL

它可以重写为:

SELECT  BusLine.LineCode AS RouteID,
  BusStation.Station AS StartStation, BusStation_1.Station AS EndStation,
  BusStation_1.StationIndex - BusStation.StationIndex AS StopCount
FROM  BusLine AS BusLine_1 
    INNER JOIN Area AS Area_1 
        ON BusLine_1.AreaID = Area_1.ID 
    INNER JOIN BusInfo AS BusInfo_1 
        ON BusLine_1.ID = BusInfo_1.BusLineID 
    INNER JOIN BusStation AS BusStation_1 
        ON BusInfo_1.ID = BusStation_1.BusInfoID 
    INNER JOIN Area 
        ON BusStation_1.StationIndex > BusStation.StationIndex AND   BusInfo_1.ID = BusInfo.ID AND Area.City = 'NewYork'
    INNER JOIN BusLine 
        ON Area.ID = BusLine.AreaID 
    INNER JOIN BusInfo 
        ON BusLine.ID = BusInfo.BusLineID 
    INNER JOIN BusStation 
        ON BusInfo.ID = BusStation.BusInfoID

编辑:我应该补充一点,嵌套的内部联接语法只是指示优先级的一种方式,即这组联接(逻辑上)应该在其他联接之前执行。一些SQL引擎支持为此目的使用括号。当所有连接都是内部连接时,嵌套和非嵌套形式(即您提供的SQL和我在上面提供的备选SQL)之间没有逻辑上的区别。

原始作者考虑得足够周到,以指示连接在逻辑上如何相关的方式缩进SQL

它可以重写为:

SELECT  BusLine.LineCode AS RouteID,
  BusStation.Station AS StartStation, BusStation_1.Station AS EndStation,
  BusStation_1.StationIndex - BusStation.StationIndex AS StopCount
FROM  BusLine AS BusLine_1 
    INNER JOIN Area AS Area_1 
        ON BusLine_1.AreaID = Area_1.ID 
    INNER JOIN BusInfo AS BusInfo_1 
        ON BusLine_1.ID = BusInfo_1.BusLineID 
    INNER JOIN BusStation AS BusStation_1 
        ON BusInfo_1.ID = BusStation_1.BusInfoID 
    INNER JOIN Area 
        ON BusStation_1.StationIndex > BusStation.StationIndex AND   BusInfo_1.ID = BusInfo.ID AND Area.City = 'NewYork'
    INNER JOIN BusLine 
        ON Area.ID = BusLine.AreaID 
    INNER JOIN BusInfo 
        ON BusLine.ID = BusInfo.BusLineID 
    INNER JOIN BusStation 
        ON BusInfo.ID = BusStation.BusInfoID

编辑:我应该补充一点,嵌套的内部联接语法只是指示优先级的一种方式,即这组联接(逻辑上)应该在其他联接之前执行。一些SQL引擎支持为此目的使用括号。当所有连接都是内部连接时,嵌套和非嵌套形式(即您提供的SQL和我上面提供的备选SQL)之间没有逻辑上的区别。

您必须给出您的模式,然后只有任何人可以解释您必须给出您的模式,然后只有任何人可以解释我添加的
添加到sql以在access中运行它,但它告诉我有语法错误:语法错误在哪里?另外,在您的pastebin'd查询中有我没有编写的括号。可能它们不匹配?我添加了括号,因为我使用access,似乎需要括号。此解决方案是根据mysql定制的。我想不是很抱歉,您在错误的位置添加了括号。我添加了
添加到sql以在access中运行它,但它告诉我有语法错误:语法错误在哪里?另外,在您的pastebin'd查询中有我没有编写的括号。可能它们不匹配?我添加了括号,因为我使用access,似乎需要括号。此解决方案是根据mysql定制的。我想不是很抱歉,你在错误的地方添加了括号。你的代码可以运行,你能告诉我它们之间的区别吗?两者之间没有逻辑上的区别,或者至少不应该有。那么在我原来的帖子中,你能告诉我连接顺序吗?你的代码可以运行,你能告诉我它们之间的区别吗?我在这里这两者在逻辑上没有区别,或者至少不应该有区别。那么在我原来的帖子中,你能告诉我连接顺序吗?