必要なのはHAVING
COUNT(*) = 2
を検索する句 日付と専門分野でグループ化した後。実際、ネストは必要ありません。 (暗黙の結合をコンマ区切りのFROM
に置き換えました 明示的なJOIN
を含む句 、これはより好ましい現代の構文です。
SELECT
v.pid,
d.speciality,
v.date,
COUNT(COUNT DISTINCT d.did) AS numvisits
FROM
visits v
JOIN Doctors d ON v.did = d.did
GROUP BY v.pid, d.speciality, v.date
HAVING COUNT(COUNT DISTINCT d.did) = 2
/* Note - depending on your RDBMS, you may
be able to use the count alias as
HAVING numvisits = 2
MySQL allows this, for ex, but MS SQL Server doesn't and I think Oracle doesn't */
SELECT
ここにリストし、GROUP BY
これらの3つの列の合計の組み合わせについて、患者ID、専門分野、日付、および訪問数を生成する必要があります。 HAVING
次に、条項は、グループに2回訪問した人だけに制限します。
のみをプルするには これからの患者は、サブクエリでラップします:
SELECT Patients.*
FROM Patients JOIN (
SELECT
v.pid,
d.speciality,
v.date,
COUNT(COUNT DISTINCT d.did) AS numvisits
FROM
visits v
JOIN Doctors d ON v.did = d.did
GROUP BY v.pid, d.speciality, v.date
HAVING COUNT(COUNT DISTINCT d.did) = 2
) subq ON Patients.pid = subq.pid