我的代码就是这样:
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中的图表。
答案 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)