Potrzebujesz HAVING
klauzula, aby znaleźć COUNT(*) = 2
po pogrupowaniu według daty i specjalności. W rzeczywistości żadne zagnieżdżanie nie powinno być nawet konieczne. (Zamieniłem również twoje niejawne sprzężenie na oddzielone przecinkami FROM
klauzula z jawnym JOIN
, która jest bardziej preferowaną współczesną składnią).
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
lista tutaj i GROUP BY
należy podać identyfikator pacjenta, specjalizację, datę i liczbę wizyt dla łącznej kombinacji tych 3 kolumn. HAVING
klauzula następnie ogranicza ją tylko do tych, którzy odwiedzili grupę 2 razy.
Aby ciągnąć tylko pacjentów z tego, zapakuj to w podzapytanie:
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