不想交叉加入,但无论如何得到它

时间:2015-10-21 15:56:03

标签: sql-server join

我在加入时遇到了一些问题,但无法弄明白。它是SQL Server 2005。

查询:

select count(*) from tblDGHistoryPO
    where ItemID = '#00 CORK'
select count(*) from tblDGHistorySO
    where ItemID = '#00 CORK'

分别返回10和19。当我尝试加入他们时,我得到一个交叉加入(190):

select count(*)
    from tblDGHistoryPO P
        inner join tblDGHistorySO S on S.ItemID = P.ItemID
    where P.ItemID = '#00 CORK'
    group by P.ItemID

如果我删除聚合,我得到类似的结果(交叉连接190行)。谁知道我做错了什么?

2 个答案:

答案 0 :(得分:1)

实际上,你得到的正是你所期望的。 INNER JOIN将第一个表中的每个匹配行与另一个表中的每个匹配行匹配。 10 X 19 = 190

您将获得JOIN的计数 - 而不是每个表中匹配计数的总和。

我不确定你为什么要加入这些牌桌。如果表具有相同的结构,您可能打算使用UNION

> WHERE MATCH(username) AGAINST ('keyword') OR MATCH(displayname) AGAINST('keyword')

然后,您可以选择该结果的计数。

答案 1 :(得分:0)

  

其实你得到了正确的结果。 Sqlserver会给你190   记录你的情况。

     

为什么?

Because you joined tblDGHistoryPO with tblDGHistorySO on the basis of ItemId. 
So, while executing the query sqlserver will select 1 item id from tblDGHistoryPO  
at a time and will give the matching results from other table i.e. tblDGHistorySO . 

So For every ItemId of tblDGHistoryPO there is 19 records in another table.   

So, total would be 10*19 = 190.