select语句中的引用

时间:2014-11-02 11:50:31

标签: 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 phoneNumber in(select phoneNumber 
                    from PATIENT
                    where name not .....);

所以在点的位置应该在父select语句中引用name。 无论如何要做到这一点,还是有完全不同的方法来解决这个问题?

4 个答案:

答案 0 :(得分:1)

自我加入应该适合你。

SELECT a.NAME,
       a.phoneNumber
FROM   PATIENT a
       JOIN PATIENT b
         ON a.phoneNumber = b.phoneNumber
            AND a.NAME <> b.NAME 

答案 1 :(得分:1)

我认为这会给你预期的答案。

   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

答案 2 :(得分:0)

我认为你需要一个自我加入:

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数。

答案 3 :(得分:0)

没有人喜欢使用GROUP BY或分析功能?

SELECT name, phonenumber
  FROM patient
 WHERE phonenumber IN ( SELECT phonenumber FROM patient
                         GROUP BY phonenumber
                        HAVING COUNT(*) > 1 )

SELECT name, phonenumber FROM (
    SELECT name, phonenumber, COUNT(*) OVER ( PARTITION BY phonenumber ) AS patient_cnt
      FROM patient
) WHERE patient_cnt > 1