我有一个表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
)。
非常感谢。
答案 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!