Sql Outer加入重复的行

时间:2011-10-20 20:43:11

标签: duplicates outer-join

我有两个表通过以下查询加入。

SELECT     
   dbo.ORDERLINE.DDCVNB, 
   dbo.ORDERLINE.DDAFAB, 
   dbo.ORDERLINE.DDAITX, dbo.ORDERLINE.DDALDT, 
   dbo.ORDERLINE.DDDUVA, dbo.ORDERLINE.DDARQT, 
   dbo.ORDERSHIPH.DHCANB, dbo.ORDERSHIPH.DHGGNB, 
   dbo.ORDERLINE.DDAAGM, dbo.ORDERLINE.DDCHNB, 
   dbo.ORDERLINE.DDAAGQ
FROM         
    dbo.ORDERLINE 
LEFT OUTER JOIN
    dbo.ORDERSHIPH ON dbo.ORDERLINE.DDAFAB = dbo.ORDERSHIPH.DHAFAB AND dbo.ORDERLINE.DDCVNB = dbo.ORDERSHIPH.DHCVNB

ORDERLINE表有700万行,ORDERSHP有200万行。

我的查询结果集有1400万行。

左外连接怎么可能?结果集不应该等于ORDERLINE中700万行的行数吗?

3 个答案:

答案 0 :(得分:2)

您可能缺少其他加入条件。如果不了解数据库中的所有字段,我们就很难协助。听起来你还需要订单表中的空记录。如果没有,请转到Cory的建议并使用内部联接。

答案 1 :(得分:1)

您的ON子句没有足够的连接条件,并且每个左侧行匹配2个右侧行。基本上是一种交叉产品。

此外,您甚至可能不想要LEFT OUTER JOIN。如果你知道通过RI或左边的每一个在右表中至少有一行你应该使用INNER JOIN。

答案 2 :(得分:0)

我发现了关于外连接的困难方法:

LEFT OUTER JOIN
dbo.ORDERSHIPH ON dbo.ORDERLINE.DDAFAB = dbo.ORDERSHIPH.DHAFAB AND dbo.ORDERLINE.DDCVNB = dbo.ORDERSHIPH.DHCVNB

如果ORDERSHIPH表有多个具有相同DHAFAB和DHCVNB值的记录(假设两个),那么select子句将返回一组行为FOR ORDERSHIPH的两个记录。这意味着700万次两次。如果ORDERSHIPH允许说3个具有相同值的记录,则会收到3组数据作为回报。