Wat je nodig hebt is een HAVING clausule om COUNT(*) = 2 . te vinden na groepering op datum en specialiteit. In feite zou nesten zelfs niet nodig moeten zijn. (Ik heb je impliciete join ook vervangen door komma's gescheiden FROM clausule met een expliciete JOIN , wat de meer geprefereerde moderne syntaxis is).
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 */
De SELECT lijst hier en GROUP BY moet de patiënt-ID, specialiteit, datum en het aantal bezoeken produceren voor de totale combinatie van die 3 kolommen. De HAVING clausule beperkt het dan tot alleen degenen met 2 bezoeken voor de groep.
Om alleen te trekken de patiënten hiervan, wikkel het in een subquery:
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