Sql 选择具有相同名称的记录会产生重复的结果

Sql 选择具有相同名称的记录会产生重复的结果,sql,oracle,Sql,Oracle,我有一个查询,可以扫描同名但ID不同的人。 表结构为Staff(名称、id) 我想找到的是同名但id不同的人(他们是不同的人) 我碰巧有两个名字和身份都一样的人 +---------+-----+ | NAME | ID | +---------+-----+ | John S. | 138 | | John S. | 491 | +---------+-----+ 到目前为止我有 select a.name, b.name, a.id, b.id from staff a, st

我有一个查询,可以扫描同名但ID不同的人。 表结构为Staff(名称、id)

我想找到的是同名但id不同的人(他们是不同的人)

我碰巧有两个名字和身份都一样的人

+---------+-----+
|  NAME   | ID  |
+---------+-----+
| John S. | 138 |
| John S. | 491 |
+---------+-----+
到目前为止我有

 select a.name, b.name, a.id, b.id
 from staff a, staff b
 where a.name = b.name and a.id != b.id
但是当我运行这段代码时,它会给出两次输出,这是

+---------+-----+
|  NAME   | ID  |
+---------+-----+
| John S. | 138 |
| John S. | 491 |
| John S. | 491 |
| John S. | 138 |
+---------+-----+

我知道为什么会发生这种情况,因为这两个输出都满足检查条件,但是我是否可以抑制已经输出的输出?我可以运行一个select表,其中ROWNUM如果只需要一个结果,可以执行以下操作:

 select a.name, b.name, a.id, b.id
 from staff a, staff b
 where a.name = b.name and a.id > b.id
 SELECT a.name, b.name, a.id, b.id
 FROM staff a
 INNER JOIN staff b
  ON(a.name = b.name and a.id > b.id)
这样,它们之间只有一个组合将响应连接条件,因此,只返回一个

顺便说一句,请避免使用隐式连接语法(逗号分隔)。仅使用join的显式语法,如下所示:

 select a.name, b.name, a.id, b.id
 from staff a, staff b
 where a.name = b.name and a.id > b.id
 SELECT a.name, b.name, a.id, b.id
 FROM staff a
 INNER JOIN staff b
  ON(a.name = b.name and a.id > b.id)

这就是你想要的:

SELECT * FROM 
    staff a
WHERE a.name IN
(
    SELECT 
        name
    FROM 
        staff b
    GROUP BY b.name
    HAVING COUNT(*) > 1
)

我认为你不需要加入,因为我想找到的是同名但身份不同的人

使用
Having
子句筛选具有多个
ID

select NAME   
from yourtable
Group by name 
having count(distinct id)> 1

不@MotoGP,仔细看看。(他不仅需要姓名,还要求提供id输出)@MotoGP他是对的,不是重复的,他的记录不会重复。@Malikasop说的是相同的名字,但有不同的田园诗,你可以检查一下。它将给出一个(name,id),它有多个记录,具有相同的名称和不同的id。这将返回,即使它是相同的id,但这将只返回名称,他想要id,我感觉他想要将其格式化为NAME1,ID1,NAME2,ID2。但是避免加入的想法很好。我想他想要的只是那些名字相同但身份不同的人。啊,我需要名字和他们的id字段,这样我就可以知道谁是谁了