Co potřebujete, je HAVING
klauzule k nalezení COUNT(*) = 2
po seskupení podle data a speciality. Ve skutečnosti by žádné hnízdění nemělo být ani nutné. (Vaše implicitní spojení jsem také nahradil čárkami oddělenými FROM
klauzule s explicitním JOIN
, což je preferovanější moderní syntaxe).
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
seznam zde a GROUP BY
by měl pro souhrnnou kombinaci těchto 3 sloupců vytvořit ID pacienta, specializaci, datum a počet návštěv. HAVING
klauzule pak jej omezuje pouze na ty, kteří mají 2 návštěvy pro skupinu.
Chcete-li vytáhnout pouze pacienti z tohoto, zabalte to do dílčího dotazu:
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