Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql select语句中的引用_Sql_Oracle_Select_Reference_Subquery - Fatal编程技术网

Sql select语句中的引用

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

我正在使用Oracle SQL Developer

我有一个带有字段名称和电话号码的患者表。 我只想显示至少与其他人拥有相同号码的人的姓名

因此,患者表如下所示:

    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