Sql 选择具有相同名称的记录会产生重复的结果
我有一个查询,可以扫描同名但ID不同的人。 表结构为Staff(名称、id) 我想找到的是同名但id不同的人(他们是不同的人) 我碰巧有两个名字和身份都一样的人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
+---------+-----+
| 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字段,这样我就可以知道谁是谁了