Yang Anda butuhkan adalah HAVING
klausa untuk menemukan COUNT(*) = 2
setelah mengelompokkan berdasarkan tanggal dan spesialisasi. Bahkan, tidak perlu bersarang. (Saya juga telah mengganti gabungan implisit Anda dengan FROM
yang dipisahkan koma klausa dengan JOIN
yang eksplisit , yang merupakan sintaks modern yang lebih disukai).
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
daftar di sini dan GROUP BY
harus menghasilkan id pasien, spesialisasi, tanggal, dan jumlah kunjungan untuk kombinasi agregat dari 3 kolom tersebut. HAVING
klausa kemudian membatasinya hanya untuk mereka yang memiliki 2 kunjungan untuk grup.
Untuk menarik hanya pasien dari ini, bungkus dalam 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