SQL - 具有LEFT OUTER JOIN的多个条件

时间:2009-09-02 20:15:47

标签: sql

我正在尝试使用多个连接条件进行OUTER JOIN。这是我的查询(我将在下面解释问题):

SELECT ad.*, cp.P_A, cp.P_B, cp.P_C
INTO #AggData3
FROM #AggData2 ad
LEFT OUTER JOIN #CompPriceTemp cp
ON ad.PART=cp.Part_No
 and ad.[Month]=cp.[Month]
 and ad.[Year]=cp.[Year]
GO

对于#AggData2中的每条记录,即每个部分的平均价格和按月的数量,我想加入三个竞争者(A,B& C)的价格。因此,我想基于Part,Month和Year加入。因为有些竞争对手不提供所有部件,所以我使用LEFT OUTER JOIN。因此,结果表(#AggData3)应该与初始表(#AggData2)具有完全相同的行数,只有三个附加列具有竞争者价格。

但是,新表(#AggData3)比#AggData2多了约35,000行。

任何想法为什么会发生这种情况,以及如何解决我的问题。

3 个答案:

答案 0 :(得分:2)

因为Table #CompPriceTemp中有多行与#AggData2中的一行匹配。

也许三个竞争对手各有一个?如果是这样,那么你需要三个连接,每个连接到同一个表,一个用于3个竞争对手中的每一个?

但是如果#CompPriceTemp中每个月,每年和每个产品都有一行,每个竞争对手有三列独立的列,那么你就会有一些不好的数据。

答案 1 :(得分:1)

疯狂猜测:

ON ad.PART=cp.Part_No
 and ad.[Month]=cp.[Month]
 and ad.[Year]=cp.[Year]

此查询不能唯一标识CP中的行。或者CP有大约35000个重复的行。

答案 2 :(得分:0)

对于AggData2中的每一行,您确定CompPriceTemp中只有一个匹配的行吗?