MySQL使用COUNT、LEFT JOIN和GROUP返回不需要的结果
我需要一些帮助来获得所需的结果,在本例中是7(products表中匹配的行数) 相反,我得到的是7行,其计数基于左联接中返回的行数MySQL使用COUNT、LEFT JOIN和GROUP返回不需要的结果,mysql,count,group-by,left-join,Mysql,Count,Group By,Left Join,我需要一些帮助来获得所需的结果,在本例中是7(products表中匹配的行数) 相反,我得到的是7行,其计数基于左联接中返回的行数 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 WHE
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行,这是从左连接开始的所有行
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
我知道这很简单,但我想不出来
谢谢 如果您想要的只是
产品的数量,就不应该加入一对多关系
将筛选条件放入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'
)
如果您只想知道产品的数量,就不应该加入一对多关系
将筛选条件放入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'
)
选择计数(不同的p.id)
,也许?由于您从两个不同的表中提取,您将得到一个不匹配的(p.id,a.col,b.col)
可能是(xxx,null,yyy)
和(xxx,yyy,null)
选择计数(不同的p.id)
?由于您从两个不同的表中提取,您将得到一个不匹配的(p.id,a.col,b.col)
可能是(xxx,null,yyy)
和(xxx,yyy,null)
选择计数(不同的p.id)
?由于您从两个不同的表中提取数据,因此(p.id,a.col,b.col)将出现不匹配,即(xxx,null,yyy)
和(xxx,yyy,null)
。实际上,distinct在没有分组依据的情况下工作。如果你把它作为一个答案,我会把它标记为正确的。不管怎样,谢谢。选择count(不同的p.id)
,也许吧?由于您从两个不同的表中提取数据,因此(p.id,a.col,b.col)将出现不匹配,即(xxx,null,yyy)
和(xxx,yyy,null)
。实际上,distinct在没有分组依据的情况下工作。如果你把它作为一个答案,我会把它标记为正确的。谢谢。我明白你的意思,但你能详细说明一下吗?我想统计的行是产品表行,但我想匹配的数据可能在其他表中,也可能不在其他表中。如果数据不在另一个表中,我不希望计算这些数据。希望这是有道理的。我明白你的意思,但你能详细说明这一点吗?我想统计的行是产品表行,但我想匹配的数据可能在其他表中,也可能不在其他表中。如果数据不在另一个表中,我不希望计算这些数据。希望这是有道理的。