如何编写此sql以使其易于理解
我已经读了10分钟以上的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
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定制的。我想不是很抱歉,你在错误的地方添加了括号。你的代码可以运行,你能告诉我它们之间的区别吗?两者之间没有逻辑上的区别,或者至少不应该有。那么在我原来的帖子中,你能告诉我连接顺序吗?你的代码可以运行,你能告诉我它们之间的区别吗?我在这里这两者在逻辑上没有区别,或者至少不应该有区别。那么在我原来的帖子中,你能告诉我连接顺序吗?