Det du har brug for er en HAVING
klausul for at finde COUNT(*) = 2
efter gruppering efter dato og speciale. Faktisk burde det ikke engang være nødvendigt at bygge rede. (Jeg har også erstattet din implicitte joinforbindelse med kommasepareret FROM
klausul med en eksplicit JOIN
, som er den mere foretrukne moderne syntaks).
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
liste her og GROUP BY
skal producere patient-id, speciale, dato og antallet af besøg for den samlede kombination af disse 3 kolonner. HAVING
klausul begrænser det så til kun dem med 2 besøg for gruppen.
For at trække kun patienterne fra dette, pakke det ind i en underforespørgsel:
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