SQL:将表连接到自身

时间:2014-04-25 15:44:21

标签: sql sql-server left-join self-join

我给出了一条每条车道有一美元金额的交通车道清单。问题是有时间接路线比直接路线便宜。我希望能够找到这些实例并将它们插入到新表中。我尝试过使用LEFT OUTER JOIN,但我无法弄明白。下面是我正在寻找的代码和我尝试的代码的示例。 我不确定它是什么数据库。

(编辑)示例:来自loc的成本。 0380到洛杉矶。 1428(直接)是100.00美元但成本从0380到1732再到1428(间接)是99.61美元。

  

组织|目的地|量

0380 | 1428 | $ 100.00

0380 | 1732 | $ 92.26

1732 | 1428 | $ 7.35


INSERT INTO dbo.NewTable 
SELECT T1.Org, T1.Dest, T1.Amount, T2.Org, T2.Dest, T2.Amount, T3.Org, T3.Dest, T3.Amount
FROM (( dbo.RateTable [T1] 
    LEFT OUTER JOIN dbo.RateTable [T2] 
        ON T1.Org = T2.Org) 
    LEFT OUTER JOIN dbo.RateTable [T3] 
        ON T1.Dest = T3.Dest AND T2.Dest = T3.Dest)
WHERE T1.Amount > (T2.Amount + T3.Amount);

2 个答案:

答案 0 :(得分:2)

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

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);

请注意,我将left outer join更改为常规内部联接。 where条件需要匹配。

这假设“Origin”的“Org”标准或类似的东西。

答案 1 :(得分:0)

以下简单选择怎么样?可以简化为这样,其中calcamount是您需要的计算量。 选择(CASE WHEN CalcAmount1> CalcAmount2 THEN Amount1 ELSE Amount2 END) 来自表