在SQL中获得比预期更多的结果左连接查询

时间:2015-05-11 17:51:41

标签: sql sql-server tsql join left-join

我的代码就是这样:

SELECT COUNT(*)
FROM earned_dollars a
LEFT JOIN product_reference b ON a.product_code = b.product_code
WHERE a.activity_year = '2015'

我正在尝试根据产品代码匹配两个表。我预计会有相同数量的结果作为表a中的总记录(2015年为一年)。但出于某种原因,我已接近300万。

表a有大约40,000,000条记录,表b有2000条。当我在没有连接的情况下运行此语句时,我得到2,500,000条结果,所以我希望即使使用左连接,但不知怎的,我得到300,000,000。有任何想法吗?我甚至参考了this post中的图表。

4 个答案:

答案 0 :(得分:4)

这意味着您的左连接只使用外键的一部分,这会导致行乘,或者在连接表中只有重复的行。

使用COUNT(DISTINCT a.product_code)

答案 1 :(得分:0)

有什么问题试图用tsql回答?

而不是select count(*)尝试选择a.product_code,b.product_code。这将显示哪些记录匹配,哪些记录不匹配。

还应添加b.product_code不为空的位置。这应该排除不匹配的记录。

b是父表,a是子表吗?尝试正确的加入。

答案 2 :(得分:0)

或使用表格的唯一标识符,即

SELECT COUNT(a.earned_dollars_id)

答案 3 :(得分:0)

不确定您的数据模型是什么样的以及结构如何,但我猜您只关心earn_dollars?

SELECT COUNT(*)
FROM earned_dollars a
WHERE a.activity_year = '2015'
and exists (select 1 from product_reference b ON a.product_code = b.product_code)