查询查找重复数据

20 浏览
0 Comments

查询查找重复数据

我有一个如下架构的表:

CUSTOMERS (id INT, name VARCHAR(10), height VARCHAR(10), weight INT)

id 是主键。我想找出具有完全相同姓名、相同身高和相同体重的人所在的行。换句话说,我想找到相对于 nameheightweight 重复的行。

示例表:

1, sam, 160, 100
2, ron, 167, 88
3, john, 150, 90
4, sam, 160, 100
5, rick, 158, 110
6, john, 150, 90
7, sam, 166, 110

示例输出:

现在由于有人拥有相同的姓名、相同的身高和相同的体重:

sam (id=1),sam (id=4)

john (id=3),john (id=6)

我想获得这些ID。如果每个匹配只获取一个id(即从第一个匹配获取id=1,从第二个匹配获取id=3),那也可以。


我正在尝试这个查询,但不确定它是否正确。

SELECT id
FROM customers
GROUP BY name, height, weight

admin 更改状态以发布 2023年5月25日
0
0 Comments

尝试这个(适用于 SQL Server):

SELECT 
    t.NAME,
    'Ids = '+
    (
        SELECT cast(Id as varchar)+',' 
        FROM Customers c 
        WHERE c.NAME = t.NAME AND c.Weight = t.Weight AND c.Height = t.Height
        FOR XML PATH('')
    )
FROM
(
    SELECT Name, height, weight
    FROM Customers
    GROUP BY Name, height, weight
    HAVING COUNT(*) > 1
) t

或者

如您所要求 - 每个匹配只有一个 ID

SELECT 
    t.NAME,
    c.Id
FROM
(
    SELECT Name, height, weight
    FROM Customers
    GROUP BY Name, height, weight
    HAVING COUNT(*) > 1
) t
JOIN Customers c ON t.NAME AND c.Weight = t.Weight AND c.Height = t.Height

0