1

私はこのクエリを持っています:

select pa.id,pa.name 
from patients pa 
where (select count(distinct co.doctorID) 
       from consults co 
       where co.patientID=pa.id) = (select count(do.id) 
                                    from doctors do);

そこでは、すべての医師と相談した患者を選びます。

私は異なる医師の数を数えており、医師の総数と等しいかどうかを確認しています。

しかし、カウントを使用せずにexistsand/orを使用してこれを行うにはどうすればよいですかin

4

2 に答える 2

2

ネストされた を使用できますNOT EXISTS:

select pa.id,pa.name 
from patients pa 
where NOT EXISTS
(
   select 1 FROM doctors do
   where NOT EXISTS
   (
      SELECT 1 FROM consults co
      WHERE co.doctorID=do.id
      AND pa.id=co.patientID
   )
)

つまり、診察を受けていない医師のいないすべての患者を選択します。少なくとも、それはあなたにアイデアを与えるはずです。

于 2013-01-11T23:36:20.477 に答える
1

NOT EXISTSカウントをまったく必要としない、さらに優れたソリューションを試すことができると思います。

SELCT pa.id,pa.name 
FROM patients pa 
WHERE NOT EXISTS (SELECT *  
                  FROM doctors do 
                       LEFT JOIN consults co  
                             ON co.doctorID ON do.id
                  WHERE co.patientID=pa.id 
                      AND co.doctorID IS NULL

    )

サブクエリでは、すべての医師を取得し、すべての医師が現在の患者の診察を受けているかどうかを確認します。co.doctorID IS NULL の場合、その医師は患者の診察を受けていません。

于 2013-01-11T23:47:12.123 に答える