Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查找3列SQL中的重复值_Mysql_Sql - Fatal编程技术网

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 |