MySQL:将GROUP BY查询应用于整个表

时间:2019-01-17 02:12:38

标签: mysql group-by

我有一个表tbl_cross包含字段number和字段register_id是另一个表tbl_registers的外键,该表包含主键{{1} }和外键id

通过以下查询,我得到了寄存器1050的重复编号。

collection_id

结果例如:

SELECT qt.*
FROM 
(
    SELECT cr.number, COUNT(*) AS cnt 
    FROM tbl_cross AS cr
    WHERE cr.register_id = 1050 
    GROUP BY cr.number
) AS qt
WHERE qt.cnt > 1 
ORDER BY qt.number ASC

非常简单。现在,我想知道如何与表number | cnt 11 | 2 181 | 3 252 | 2 进行联接以获取每个寄存器的每个重复项。

tbl_registers

例如,或添加WHERE条件以获取每个寄存器的重复值属于集合56(register_id | number | cnt 1050 | 11 | 2 1050 | 181 | 3 1050 | 252 | 2 2023 | 12 | 2 3034 | 77 | 3 3034 | 106 | 2 )。

非常感谢。

3 个答案:

答案 0 :(得分:1)

加入两个表并按两列分组。

SELECT cr.register_id, cr.number, COUNT(*) AS cnt
FROM tbl_cross AS cr
JOIN tbl_register as r ON cr.register_id = r.id
WHERE r.collection_id = 56
GROUP BY register_id, number
HAVING cnt > 1

您可以使用HAVING过滤掉非重复项,不需要子查询。

答案 1 :(得分:0)

我相信您所追求的是这样的:

SELECT *
FROM (
    SELECT
        reg.id,
        reg.collection_id,
        cr.number,
        COUNT(*) AS ct
    FROM tbl_registers AS reg
    INNER JOIN tbl_cross AS cr
        ON cr.register_id = reg.id
    GROUP BY
        reg.id,
        reg.collection_id,
        cr.number
) duplicates
WHERE duplicates.ct > 1
-- AND duplicates.collection_id = 56

答案 2 :(得分:0)

您直接询问的是GROUP BY语句。您希望将register_id分组,以便没有重复项,而且还可以看到每个registeredId的编号。

对于您遇到的所有SQL问题,网上技术都是不错的参考:https://www.techonthenet.com/sql/group_by.php

一切顺利,欢迎来到Stackoverflow!