我需要一些帮助来获得所需的结果,在这种情况下,结果为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中的所有行。
我知道这很简单,但我无法理解。
感谢。
答案 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'
)