【问题标题】:SQL SELF-JOIN with Oracle 11G - Finding a patient who has the same telephone numberSQL SELF-JOIN 与 Oracle 11G - 查找具有相同电话号码的患者
【发布时间】:2015-06-17 08:47:23
【问题描述】:

我的选择查询卡在某个点上。我需要从“患者”表中找到一个与其他患者手机号码匹配的手机号码(如果有任何意义的话)。

目前我从患者表中获得了这个插入值:

insert into patient
values(1022010201, 88.2, 77, 0676762516);
insert into patient
values(1022010202, 66.7, 55, 0676762518);
insert into patient
values(1022010203, 59.6, 65, 0676762517);
insert into patient
values(1022010204, 99.1, 76, 0676762515);
insert into patient
values(1022010205, 88.2, 89, 0676762514);
insert into patient
values(1022010207, 91.4, 76, 0676762513);
insert into patient
values(182704726, 54.4, 44, 0676762516);

第一个和最后一个电话号码相同。通过我的“自加入”查询,我没有得到那个值,但我也得到了其他值。

从某种意义上说,这是有道理的,因为我的查询将表患者与它自身联系起来。因此,以这种方式,选择查询确实找到了匹配对的数字。

所以在这一点上,我被困在如何只获得真正匹配的电话号码而不是所有其他号码。

this is my select query at the moment:
select p1.telefoonnr, p2.telefoonnr
from patient p1, patient p2
where p1.telefoonnr = p2.telefoonnr;

这是结果:

TELEFOONNR           TELEFOONNR         
-------------------- --------------------
676762516            676762516            
676762518            676762518            
676762517            676762517            
676762515            676762515            
676762514            676762514            
676762513            676762513            
06-12345678          06-12345678          

 7 rows selected  

任何帮助都会很棒。

提前致谢

【问题讨论】:

    标签: sql join oracle11g self-join


    【解决方案1】:

    试试这个:

    select telefoonnr,count(telefoonnr)
    from patient 
    group by telefoonnr
    having count (telefoonnr) > 1;
    

    这就像在您的表中查找重复项。因此,上面的查询将为您提供 telefoonnr 以及 count 以及表中的其他详细信息。

    【讨论】:

    • 感谢您的回复。 '*' 对我没有任何作用。它将显示一条错误消息“缺少表达式”。
    • @MaximedeLange:- 删除*。看看这是否给出了你想要的结果。代替*,您可以命名您想要的列。
    • 这很奇怪。我昨天尝试了很多东西。不仅是您的解决方案,还有网络上的不同解决方案。它们都导致给出所有行或给出 0 行。我的插入值有问题吗?
    【解决方案2】:

    我找到了解决我自己问题的方法。

    我正在寻找的结果是这样的:

    TELEFOONNR                  BSN
    -------------------- ----------
    676762516            1022010201 
    676762516             182704726 
    

    这可能是由于以下查询:

    select telefoonnr, bsn
    from patient
    where telefoonnr =
    (select telefoonnr 
    from patient 
    group by telefoonnr
    having count(*) >1);
    

    【讨论】:

      【解决方案3】:

      如果您想要共享手机号码的患者他们共享的号码,那么自我加入可以帮助您:

      Select  p1.ID, p2.ID, p1.telefoonnr
      from    Patient  p1
      join    Patient  p2
          on  p2.telefoonnr = p1.telefoonnr
          and p2.ID <> p1.ID;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-13
        • 1970-01-01
        • 1970-01-01
        • 2015-06-04
        • 1970-01-01
        • 2018-03-03
        • 2016-05-13
        相关资源
        最近更新 更多