आपको जो चाहिए वह है HAVING
COUNT(*) = 2
find खोजने के लिए क्लॉज तिथि और विशेषता के आधार पर समूहबद्ध करने के बाद। वास्तव में, कोई घोंसला बनाना भी आवश्यक नहीं होना चाहिए। (मैंने आपके निहित जुड़ाव को अल्पविराम से अलग FROM
. से भी बदल दिया है एक स्पष्ट 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
/* 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
यहां सूचीबद्ध करें और GROUP BY
उन 3 कॉलम के समग्र संयोजन के लिए रोगी आईडी, विशेषता, तिथि और विज़िट की संख्या का उत्पादन करना चाहिए। HAVING
क्लॉज तब इसे केवल उन लोगों तक सीमित करता है जिनके पास समूह के लिए 2 विज़िट हैं।
केवलखींचने के लिए इससे मरीज़, इसे एक सबक्वायरी में लपेटें:
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