Това, от което се нуждаете, е 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 колони. 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