我正在尝试使用多个连接条件进行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行。
任何想法为什么会发生这种情况,以及如何解决我的问题。
答案 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中只有一个匹配的行吗?