SQL:将表连接到自身

SQL:将表连接到自身,sql,sql-server,left-join,self-join,Sql,Sql Server,Left Join,Self Join,我得到了一个交通车道列表,每条车道的金额为1美元。问题是,有时间接路线比直接路线便宜。我希望能够找到这些实例并将它们插入到新表中。我试过使用左外连接,但我不太明白。下面是我正在寻找的示例和我尝试的代码。我不确定它是什么数据库 (编辑)示例:loc的成本。0380至loc。1428(直接)是100.00美元,但从0380到1732的成本,然后1428(间接)是99.61美元 组织|目的地|金额 0380 | 1428 | 100.00美元 0380 | 1732 | 92.26美元 1732 |

我得到了一个交通车道列表,每条车道的金额为1美元。问题是,有时间接路线比直接路线便宜。我希望能够找到这些实例并将它们插入到新表中。我试过使用左外连接,但我不太明白。下面是我正在寻找的示例和我尝试的代码。我不确定它是什么数据库

(编辑)示例:loc的成本。0380至loc。1428(直接)是100.00美元,但从0380到1732的成本,然后1428(间接)是99.61美元

组织|目的地|金额

0380 | 1428 | 100.00美元

0380 | 1732 | 92.26美元

1732 | 1428 | 7.35美元



我认为唯一需要做的更改是在最后一个连接条件中:

SELECT T1.Org, T1.Dest, T1.Amount, T2.Org, T2.Dest, T2.Amount, T3.Org, T3.Dest, T3.Amount
FROM dbo.RateTable T1 JOIN
     dbo.RateTable T2
     ON T1.Org = T2.Org JOIN
     dbo.RateTable T3 
     ON T1.Dest = T3.Dest AND T2.Dest = T3.Org
----------------------------------------^
WHERE T1.Amount > (T2.Amount + T3.Amount);
注意,我将
左外部联接
更改为常规内部联接。
,其中
条件需要匹配项


这是假设“Origin”是“Origin”或类似的标准。

下面的简单选择如何?如果calcamount是您所需的计算数量,则可以将其简化。 选择(当CalcAmount1>CalcAmount2,然后是Amount1,其他Amount2结束时的情况)
从表中

您使用的是什么数据库?您能否提供带有列编辑的示例数据?(请用这些信息编辑问题。)我同意戈登的说法。我们需要更多information@BJW . . . 我要做一个飞跃并标记这个sql server。语法基本上是SQL Server(或者Sybase)。我想确定它不是Access,但Access不支持“左外部连接”中的“外部连接”。@GordonLinoff我做了一些挖掘,发现了这个:localhost\SCGSQLEXPR2008R2。这有帮助吗?是的,Org=Orign,Dest=Destination。
SELECT T1.Org, T1.Dest, T1.Amount, T2.Org, T2.Dest, T2.Amount, T3.Org, T3.Dest, T3.Amount
FROM dbo.RateTable T1 JOIN
     dbo.RateTable T2
     ON T1.Org = T2.Org JOIN
     dbo.RateTable T3 
     ON T1.Dest = T3.Dest AND T2.Dest = T3.Org
----------------------------------------^
WHERE T1.Amount > (T2.Amount + T3.Amount);