1

私のwhere exists条項が機能していません。私が見逃している些細なことは何ですか?

select * from patient as p
where exists
(
    select p.patientid, count(*) from tblclaims as c 
    inner join patient as p on p.patientid=c.patientid
    and p.admissiondate = c.admissiondate
    and p.dischargedate = c.dischargedate
    group by p.patientid
    having count(*)>500
)

クエリでわかるように、patientとtblclaimsは3フィールドの複合キーによって結合されます。

4

3 に答える 3

2

count(*) from tblclaims as c不要であり、クエリを破棄する可能性があります。

WHEREまた、条項に結合patient pする条項はありませんexists

言うまでもなくp、メインクエリと句の両方でエイリアスとして使用しているため、exists混乱を招きます。

あなたはおそらく次のようなものが欲しいでしょう:

select * from patient
where exists
(
    select p.patientid 
    from tblclaims as c 
    inner join patient as p on p.patientid=c.patientid
        and p.admissiondate = c.admissiondate
        and p.dischargedate = c.dischargedate
    where patient.patientid = p.patientid
    group by p.patientid
    having count(*)>500
)
于 2012-07-24T02:00:02.110 に答える
1

サブクエリで内部結合を使用する必要はまったくありません。それが実際にあなたの余分な結果の原因です。外部クエリで「p」を参照する必要があります。

select * from patient as p
where exists
(
    select 1 from tblclaims as c 
    where p.patientid = c.patientid
       and p.admissiondate = c.admissiondate
       and p.dischargedate = c.dischargedate
    group by c.patientid
    having count(*)>500
)
于 2012-07-24T02:08:19.437 に答える
0

私は存在のファンではありません。多分あなたは他の機能を使うことができます。これを試して:

select * from patient as p
where patientid IN
(
    select p.patientid from tblclaims as c 
    inner join patient as p on p.patientid=c.patientid
    and p.admissiondate = c.admissiondate
    and p.dischargedate = c.dischargedate
    group by p.patientid
    having count(*)>500
)
于 2012-07-24T02:02:20.537 に答える