我在加入时遇到了一些问题,但无法弄明白。它是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行)。谁知道我做错了什么?
答案 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.