Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL使用COUNT、LEFT JOIN和GROUP返回不需要的结果_Mysql_Count_Group By_Left Join - Fatal编程技术网

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

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

我需要一些帮助来获得所需的结果,在本例中是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 
            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在没有分组依据的情况下工作。如果你把它作为一个答案,我会把它标记为正确的。谢谢。我明白你的意思,但你能详细说明一下吗?我想统计的行是产品表行,但我想匹配的数据可能在其他表中,也可能不在其他表中。如果数据不在另一个表中,我不希望计算这些数据。希望这是有道理的。我明白你的意思,但你能详细说明这一点吗?我想统计的行是产品表行,但我想匹配的数据可能在其他表中,也可能不在其他表中。如果数据不在另一个表中,我不希望计算这些数据。希望这是有道理的。