Mysql 查找重复项的查询
我有一个具有以下架构的表:Mysql 查找重复项的查询,mysql,sql,sql-server,database,oracle,Mysql,Sql,Sql Server,Database,Oracle,我有一个具有以下架构的表: 客户(id INT、name VARCHAR(10)、height VARCHAR(10)、weight INT) id是主键。我想找出那些名字、身高和体重完全相同的人所在的行。换句话说,我想找出与姓名、身高和体重相关的重复项 示例表: 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, 11
客户(id INT、name VARCHAR(10)、height VARCHAR(10)、weight INT)
id
是主键。我想找出那些名字、身高和体重完全相同的人所在的行。换句话说,我想找出与姓名
、身高
和体重
相关的重复项
示例表:
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
示例输出:
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=1,第二场比赛id=3),也可以
我正在尝试这个查询,但不确定它是否正确
SELECT id
FROM customers
GROUP BY name, height, weight
你走在正确的道路上:
SELECT min(id)
FROM customers
GROUP BY name, height, weight
HAVING COUNT(*) > 1
请尝试以下操作(对sql server有效):
或
如你所问-每场比赛只有一个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
我不知道你在用什么,因为你标记了几个数据库 在Sql server中,如果不将id放入
select
,您将无法选择该id
因此,如果您想选择组类别中的字段之外的其他字段,可以使用分区依据
。大概是这样的:
SELECT id,
ROW_NUMBER() OVER(PARTITION BY c.name, c.height, c.weight ORDER BY c.name) AS DuplicateCount
FROM customers c
这将为您提供具有相同名称、高度和重量的副本的ID。我不确定这是否比其他解决方案更快,但是,您可以对其进行分析和比较。如果可以按照您所说的每次匹配只获取一个id,那么您就接近解决方案了:
SELECT
min( id )
,name, height, weight --<-- oncly if you need/want
FROM customers
GROUP BY name, height, weight
HAVING count(*) > 1
选择
最小(id)
,姓名,身高,体重--1
我认为这种方式行不通,因为您必须在group by子句中添加id字段。这应该行得通。我建议使用DuplicateCustomers而不是X作为您的内部select表名。我的朋友,您完全正确。我只是没有注意它,因为它只是一个简单的例子。Teşekkürler:)可能重复
SELECT id,
ROW_NUMBER() OVER(PARTITION BY c.name, c.height, c.weight ORDER BY c.name) AS DuplicateCount
FROM customers c
SELECT
min( id )
,name, height, weight --<-- oncly if you need/want
FROM customers
GROUP BY name, height, weight
HAVING count(*) > 1