我无法在标题中找到我需要的东西,对不起。无论如何,我在这里有一张桌子:
CREATE TABLE DOCUMENTS
(
ID NUMBER (5,0)
, PIN VARCHAR2(7 BYTE)
, FIRST_NAME VARCHAR2(20 BYTE)
, LAST_NAME VARCHAR2(20 BYTE)
);
INSERT INTO "JM_WARRANT"."DOCUMENTS" VALUES (1,'AZU5FG', 'JOHN', 'SMITH')
INSERT INTO "JM_WARRANT"."DOCUMENTS" VALUES (2,'BG45SF', 'MARY', 'BROWN')
INSERT INTO "JM_WARRANT"."DOCUMENTS" VALUES (3,'AZU5FG', 'JOHN', 'SMITH')
INSERT INTO "JM_WARRANT"."DOCUMENTS" VALUES (4,'WHT56B', 'JOHN', 'SMITH')
INSERT INTO "JM_WARRANT"."DOCUMENTS" VALUES (5,'BG45SF', 'MARY', 'BROWN')
INSERT INTO "JM_WARRANT"."DOCUMENTS" VALUES (6,'ZSF09V', 'JOSCH','ZEPLIN')
ID PIN FIRST_NAME LAST_NAME
---|--------|----------|-------
1 |AZU5FG | JOHN | SMITH
2 |BG45SF | MARY | BROWN
3 |AZU5FG | JOHN | SMITH
4 |WHT56B | JOHN | SMITH
5 |BG45SF | MARY | BROWN
6 |ZSF09V | JOSCH | ZEPLIN
简单地说,一个人是由PIN唯一识别的。如您所知,不同的人可以使用相同的名称。从这个表中我只需要选择与其他人不共享同名的那些。注意一个人在表中可以有多个记录。因此,如果我们采用此样本数据表,MARY BROWN和JOSCH ZEPLIN是合格的,因为它们具有唯一的名称。虽然MARY BROWN有两个记录,但由于相同的PIN,它是同一个人。但约翰·史密斯不符合要求,因为有两个同名的人。获得此结果的正确SQL是什么?
修改 另外,我只需要一个记录。所以基本上从这张表中我需要看到以下结果:
PIN FIRST_NAME LAST_NAME
--------|----------|-------
BG45SF | MARY | BROWN
ZSF09V | JOSCH | ZEPLIN
答案 0 :(得分:3)
按名字和姓氏分组并计算不同的引脚:
select first_name, last_name, min(pin) as pin
from documents
group by first_name, last_name
having count(distinct pin) = 1;
答案 1 :(得分:2)
使用not exists
过滤此类人员:
select distinct FIRST_NAME, LAST_NAME, PIN
from DOCUMENTS d1
where not exists(select * from DOCUMENTS d2
where d1.FIRST_NAME = d2.FIRST_NAME and
d1.LAST_NAME = d2.LAST_NAME and
d1.PIN <> d2.PIN )