我有一个查询,该查询扫描名称相同但ID不同的人。表结构为Staff(name,id)
我想找到的是具有相同名称但具有不同ID的人(他们是不同的人)。
我确实有两个人的名字和差异ID相同。
+---------+-----+
| NAME | ID |
+---------+-----+
| John S. | 138 |
| John S. | 491 |
+---------+-----+
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有
select a.name, b.name, a.id, b.id
from staff a, staff b
where a.name = b.name and a.id != b.id
Run Code Online (Sandbox Code Playgroud)
但是,当我运行这段代码时,它给出两次输出,分别是
+---------+-----+
| NAME | ID |
+---------+-----+
| John S. | 138 |
| John S. | 491 |
| John S. | 491 |
| John S. | 138 |
+---------+-----+
Run Code Online (Sandbox Code Playgroud)
我知道为什么会这样,因为这两个输出都满足检查条件,但是无论如何我可以抑制已经输出的输出吗?我可以运行一个选择表,并且WHERE ROWNUM <= 2,但是当我有更多同名的人时,这不是最佳选择。
谢谢!
我不认为你需要JOIN这个我想找的是那些名字相同但id不同
使用Having子句过滤name's拥有多个的人ID
select NAME
from yourtable
Group by name
having count(distinct id)> 1
Run Code Online (Sandbox Code Playgroud)
如果你只想要一个结果,你可以这样做:
select a.name, b.name, a.id, b.id
from staff a, staff b
where a.name = b.name and a.id > b.id
Run Code Online (Sandbox Code Playgroud)
这样,它们之间只有一个组合会满足连接条件,因此,只会返回一个
顺便说一句 - 请避免使用隐式连接语法(逗号分隔)。仅使用join 的显式语法,如下所示:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3656 次 |
| 最近记录: |