0

我需要一些帮助才能获得所需的结果,在本例中为 7(产品表中匹配的行数)。

相反,我得到的是 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 中的所有行。

我知道这很简单,但我无法弄清楚。

谢谢。

4

2 回答 2

3

select count(distinct p.id), 也许?因为你从两张不同的桌子上拉出来,你会得到一个混搭的(p.id, a.col, b.col)存在(xxx, null, yyy)(xxx, yyy, null)

于 2012-11-04T05:20:06.830 回答
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'
        )
于 2012-11-04T05:13:24.663 回答