我有一个查询,可以扫描具有相同名称但不同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但是当我有更多同名的人时,这不是最佳情况。
谢谢!
答案 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
)