谁能解决这个mysql语句在哪里计数的问题?

谁能解决这个mysql语句在哪里计数的问题?,mysql,sql,group-by,aggregate-functions,Mysql,Sql,Group By,Aggregate Functions,我将两个表连接在一起,我只想列出那些行,这些行的分组行数与表A的值不匹配 table A id name pieces 1 name_1 6 2 name_2 2 table B a_id 1 1 2 2 因此,我想要的是获取所有a.name,其中a.piece是分组行计数的。 大概是这样的: SELECT a.name FROM a INNER JOIN b ON a.id = b.a_id WH

我将两个表连接在一起,我只想列出那些行,这些行的分组行数与表A的值不匹配

table A
id     name    pieces
1      name_1    6
2      name_2    2

table B
a_id
1
1
2
2
因此,我想要的是获取所有a.name,其中a.piece是分组行计数的。 大概是这样的:

SELECT a.name
FROM   a
       INNER JOIN b
               ON a.id = b.a_id
WHERE  a.pieces <> Count(*)
GROUP  BY id  
name     count
name_1     2
因为name_1有表.b中的2个分组行,并且它与6的.piece不匹配。

您可以在pieces上使用MAX,因为它只是一个标量值,所以不会有任何区别。这也将使查询仅符合“完整”模式下的“分组”


您可以聚合tableb中的数据并将其与tablea连接:

SELECT tablea.name
FROM tablea
INNER JOIN (
    SELECT a_id, COUNT(*) AS c
    FROM tableb
    GROUP BY a_id
) AS groupedb ON tablea.id = tableb.a_id
WHERE tablea.pieces <> groupedb.c

而不是!==我想写<>但是stackoverflow没有显示字符组合。你能告诉我什么是唯一的“满”组吗?@Ninet9检查这个答案:谢谢。我可以接受这些严格的规则。@Ninet9是的,你应该使用严格模式,因为这是正确的方式,符合ANSI标准
SELECT a.id, a.name, COUNT(*) AS count
FROM   a
       INNER JOIN b
               ON a.id = b.a_id
GROUP  BY a.id, a.name 
HAVING MAX(a.pieces) <> COUNT(*) 
SELECT tablea.name
FROM tablea
INNER JOIN (
    SELECT a_id, COUNT(*) AS c
    FROM tableb
    GROUP BY a_id
) AS groupedb ON tablea.id = tableb.a_id
WHERE tablea.pieces <> groupedb.c