外部联接充当内部联接

时间:2016-10-24 22:28:02

标签: sql sql-server tsql join

处理这个错误,我需要另外一双眼睛 此查询应该记录Period_Matrix中的所有记录,无论它是否在Sales_Matrix中,但它不是,相反,它只记录两者都在哪里,这是一个内连接,而不是外连接。这是在SQL Server上 就像我说的那样,花了一个小时,需要一个全新的视角。

select 
   *
from Period_Matrix PM 
left outer join Sales_Matrix SM_Current 
on PM.current_period = SM_Current.period 
and PM.Product_Type = SM_Current.Product_Type 
and PM.team_no = SM_Current.team_no
order by period desc, team_no

1 个答案:

答案 0 :(得分:2)

这是您的查询:

ipython

这应该是一个真正的左连接。问题是:你看到了你期望的结果吗?

好吧,首先你有重复的列名。更重要的是,您拥有select * from Period_Matrix PM left outer join Sales_Matrix SM_Current on PM.current_period = SM_Current.period and PM.Product_Type = SM_Current.Product_Type and PM.team_no = SM_Current.team_no order by period desc, team_no; second 表中的列。 order by值并不总是以您希望的方式排序。我建议:

NULL

我猜这会解决你的问题。

select PM.*, SM_Current.??, . . . from Period_Matrix PM left outer join Sales_Matrix SM_Current on PM.current_period = SM_Current.period and PM.Product_Type = SM_Current.Product_Type and PM.team_no = SM_Current.team_no order by PM.current_period desc, PM.team_no; 表示要明确列出第二个表中的所有列,以避免重复和冗余。