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