Sql select语句中的引用
我正在使用Oracle SQL Developer 我有一个带有字段名称和电话号码的患者表。 我只想显示至少与其他人拥有相同号码的人的姓名 因此,患者表如下所示:Sql select语句中的引用,sql,oracle,select,reference,subquery,Sql,Oracle,Select,Reference,Subquery,我正在使用Oracle SQL Developer 我有一个带有字段名称和电话号码的患者表。 我只想显示至少与其他人拥有相同号码的人的姓名 因此,患者表如下所示: create table PATIENT( name varchar2(9) primary key, phoneNumber varchar2(15) null ); 因此,我尝试了以下方法: select name, phoneNumber from PATIENT where phoneNumbe
create table PATIENT(
name varchar2(9) primary key,
phoneNumber varchar2(15) null
);
因此,我尝试了以下方法:
select name, phoneNumber
from PATIENT
where phoneNumber in(select phoneNumber
from PATIENT
where name not .....);
因此,点的位置应该在父select语句中引用名称。
到底有没有办法做到这一点,或者有没有完全不同的方法来解决这个问题?自连接应该适合您
SELECT a.NAME,
a.phoneNumber
FROM PATIENT a
JOIN PATIENT b
ON a.phoneNumber = b.phoneNumber
AND a.NAME <> b.NAME
选择一个名称,
a、 电话号码
来自患者a
加入病人b
在a.phoneNumber=b.phoneNumber上
a.名字b.名字
我认为您需要一个自连接:
SELECT *
FROM PATIENT P1 JOIN PATIENT P2 ON (P1.phoneNumber = P2.phoneNumber)
结果将类似于:
“aaa”“12345”“bbb”“12345”
“bbb”“12345”“aaa”“12345”
“ccc”“00000”“ddd”“00000”
“ddd”“00000”“ccc”“00000”
正如您所看到的,将出现“重复行”,因为对于对称属性,如果A具有相同数量的B,则B具有相同数量的A。我认为这将给出预期的答案
select parent_q.NAME,
parent_q.phoneNumber
from PATIENT parent_q
where (select count(sub_q.phoneNumber)
from PATIENT sub_q
where sub_q.phoneNumber = parent_q.phoneNumber) > 1
没有人喜欢使用分组函数或分析函数
SELECT name, phonenumber
FROM patient
WHERE phonenumber IN ( SELECT phonenumber FROM patient
GROUP BY phonenumber
HAVING COUNT(*) > 1 )
或
查询将为您提供此结果“aaa”“12345”“aaa”“12345”,这是不需要的!!添加P1.name!=P2.name我使用所有这些内部联接得到以下错误:“00918。00000-“列定义不明确”@Politiepet yes现在错过了别名检查。
SELECT name, phonenumber FROM (
SELECT name, phonenumber, COUNT(*) OVER ( PARTITION BY phonenumber ) AS patient_cnt
FROM patient
) WHERE patient_cnt > 1