MySQL使用COUNT,LEFT JOIN和GROUP返回不需要的结果

时间:2012-11-04 05:09:50

标签: mysql count group-by left-join

我需要一些帮助来获得所需的结果,在这种情况下,结果为7(product表中可匹配的行数)。

我得到的是7行,根据LEFT JOIN中返回的行数进行计数。

SELECT count(p.id) as theCount 
            FROM products p 
            left join tablea a on p.id = a.productId 
            left join tableb b on p.id = b.productId 
            WHERE (a.col = 'val' or b.col = 'val')
group by p.id

如果我不按p.id分组,我会返回28行,这是LEFT JOIN中的所有行。

我知道这很简单,但我无法理解。

感谢。

2 个答案:

答案 0 :(得分:3)

也许是

select count(distinct p.id)?由于您从两个不同的表中提取,因此(p.id, a.col, b.col) (xxx, null, yyy) (xxx, yyy, null)和{{1}}

会出现错误

答案 1 :(得分:2)

如果您想要的只是products的计数,则不应加入一对多关系。

将过滤条件放在WHERE子句中。

SELECT count(*) as theCount 
        FROM products p 
        WHERE p.id IN (
             SELECT a.productId
             FROM tablea a
             WHERE a.productId = p.id AND a.col = 'val'

             UNION

             SELECT b.productId
             FROM tableb b
             WHERE b.productId = p.id AND b.col = 'val'
        )