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

时间:2016-03-13 08:35:21

标签: sql oracle

我有一个查询,可以扫描具有相同名称但不同ID的人。 表结构是Staff(name,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 |
+---------+-----+

我知道为什么会发生这种情况,因为这两个输出都满足检查条件,但无论如何我可以抑制已输出的输出吗?我可以运行一个选择表和WHERE ROWNUM< = 2但是当我有更多同名的人时,这不是最佳情况。

谢谢!

3 个答案:

答案 0 :(得分:3)

我认为您不需要JOIN这个我想找到的是同名但身份不同的人

使用Having子句过滤具有多个name's的{​​{1}}

ID

答案 1 :(得分:1)

如果您只想要一个结果,您可以这样做:

intTime = TIME('S',TIME('S')+900,'S')

这样,它们之间只有一个组合会回答连接条件,因此只返回一个

BTW - 请避免使用隐式连接语法(以逗号分隔)。仅使用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

答案 2 :(得分:1)

这就是你想要的:

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