Mysql 查找3列SQL中的重复值
我有一张如下表:Mysql 查找3列SQL中的重复值,mysql,sql,Mysql,Sql,我有一张如下表: Site | Name | ID A | Mike | 1 A | Mary | 2 A | Mary | 3 B | Mary | 1 B | Rich | 2 我想在一个站点中找到所有重复的名称。因此,我试图返回: Site | Name | ID A | Mary | 2 A | Mary | 3 我试过这个: SELECT DISTINCT Site, Name, ID from table group by ID having count(*) > 1 结
Site | Name | ID
A | Mike | 1
A | Mary | 2
A | Mary | 3
B | Mary | 1
B | Rich | 2
我想在一个站点中找到所有重复的名称。因此,我试图返回:
Site | Name | ID
A | Mary | 2
A | Mary | 3
我试过这个:
SELECT DISTINCT Site, Name, ID
from table
group by ID having count(*) > 1
结果是错误的,因为它将A和B两个站点一起计算。我只希望在每个站点内找到的重复项,而不希望在各个站点之间找到重复项。您可以使用exists或in:
您可以尝试将“不存在”与子查询一起使用
重复的名称在站点中
问题1:
:
在每个站点中查找的副本
问题1:
:
@Rawrplus你打算对内部连接做什么?@Eric好的,它背后的想法是确定重复发生的位置并只返回匹配的值。虽然是的,事后看来,这是相当过分的,这里的内部连接实际上有点违背了目的。所以,是的,这个命题被撤回了,在答案中找到了更好的解决方案
select t.*
from t
where exists (select 1
from t t2
where t2.site = t.site and t2.name = t.name and t2.id <> t.id
);
CREATE TABLE T(
Site varchar(5),
Name varchar(5),
ID int
);
insert into t values ('A','Mike', 1);
insert into t values ('A','Mary', 2);
insert into t values ('A','Mary', 3);
insert into t values ('B','Mary', 1);
insert into t values ('B','Rich', 2);
SELECT * FROM T t1 WHERE
NOT exists
(
SELECT 1
FROM T tt
where t1.name = tt.name
group by Name
HAVING MIN(tt.ID) = t1.ID
)
| Site | Name | ID |
|------|------|----|
| A | Mary | 2 |
| A | Mary | 3 |
CREATE TABLE T(
Site varchar(5),
Name varchar(5),
ID int
);
insert into t values ('A','Mike', 1);
insert into t values ('A','Mary', 2);
insert into t values ('A','Mary', 3);
insert into t values ('B','Mary', 1);
insert into t values ('B','Rich', 2);
SELECT t1.*
FROM T t1
WHERE not exists
(
SELECT 1
FROM T tt
where t1.name = tt.name and t1.Site = tt.Site
group by Name,Site
HAVING MIN(tt.ID) = t1.ID
)
| Site | Name | ID |
|------|------|----|
| A | Mary | 3 |