Join与子查询做同样的事情有什么区别?

时间:2014-01-20 05:52:36

标签: sql-server-2005

我有tblProducts和NioaProducts。 tblProducts看起来像这样: id | productId | skuCode | manCode | .....

NioaProducts看起来像这样: partNo | manuCode |价格| ....

现在,我正在执行这两个查询,我得到不同的计数,

 SELECT     COUNT(manCode) AS Expr1
 FROM         tblProducts p
 WHERE     (manCode IN
                          (SELECT     manuCode
                            FROM          NioaProducts))

这给了我o / p:10057

现在我正在使用内部联接

做同样的事情
   SELECT     COUNT(manCode) AS Expr1
     FROM         tblProducts p inner join NioaProducts n on p.manCode = n. manuCode

这给了我o / p:11481

我只是想知道哪个查询是正确的以及为什么两个结果都不同?

1 个答案:

答案 0 :(得分:1)

Why the results are different ?

一种可能性是一对多的关系。 考虑以下两个表

tblProducts -

manCode   Product
1         p1
2         p2
3         p3

NioaProducts -

manCode   NioaProductName
1         np1
2         np2
2         np3

运行时

SELECT     COUNT(manCode) AS Expr1
FROM         tblProducts p
WHERE     (manCode IN
                      (SELECT     manuCode
                        FROM          NioaProducts))

子查询返回(1,2,2)因此查询仅筛选1和2作为结果。所以它返回2。

但是当你运行连接查询时

SELECT     COUNT(manCode) AS Expr1
FROM         tblProducts p inner join NioaProducts n on p.manCode = n. manuCode

内连接的结果是

tblProducts.manCode NioaProducts.manCode
1                   1
2                   2
3                   2

因此计数返回3