Mysql选择查找重复项

Cen*_*ion 3 php mysql sql select

有人可以帮我写一个SQL选择来执行任务.所以问题是我们有一个表,并且有一些重复,所以我需要找到名称,街道和房子相同的地方,并以某种方式分组.

我几乎有 这种情况,但区别在于我想将它们分组以找到什么是重复的.

提前致谢.

Dan*_*llo 9

这假设您有一个id字段,该字段将与GROUP_CONCAT()每个重复行的函数分组:

SELECT    t1.name, t1.street, t1.house, GROUP_CONCAT(DISTINCT t1.id) dupes
FROM      your_table t1
JOIN      your_table t2 ON (t2.name = t1.name AND 
                            t2.street = t1.street AND 
                            t2.house = t1.house)
GROUP BY  t1.name, t1.street, t1.house
HAVING    COUNT(*) > 1;
Run Code Online (Sandbox Code Playgroud)

测试用例:

CREATE TABLE your_table (
   id int, 
   name varchar(10), 
   street varchar(10), 
   house varchar(10)
);

INSERT INTO your_table VALUES (1, 'a', 'b', 'c');
INSERT INTO your_table VALUES (2, 'a', '1', 'c');
INSERT INTO your_table VALUES (3, 'a', '2', '3');
INSERT INTO your_table VALUES (4, 'a', 'b', 'c');
INSERT INTO your_table VALUES (5, 'a', 'b', 'c');
INSERT INTO your_table VALUES (6, 'c', 'd', 'e');
INSERT INTO your_table VALUES (7, 'c', 'd', 'e');
Run Code Online (Sandbox Code Playgroud)

结果:

+------+--------+-------+-------+
| name | street | house | dupes |
+------+--------+-------+-------+
| a    | b      | c     | 1,5,4 |
| c    | d      | e     | 6,7   |
+------+--------+-------+-------+
2 rows in set (0.03 sec)
Run Code Online (Sandbox Code Playgroud)