Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

दृश्यों का उपयोग करने के बजाय मैं एक साधारण चयन क्वेरी कैसे लिखूं?

आपको जो चाहिए वह है 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. भौगोलिक निकटता की गणना के लिए सूत्र

  2. MySQL - ग्रुप बाय के साथ सशर्त COUNT

  3. MySql क्वेरी चलती है लेकिन यह sp . में काम नहीं करती है

  4. MySQL:अन्य डेटाटाइम फ़ील्ड में डेटाटाइम डालें

  5. क्या max_allowed_packet को बदले बिना mysql DB में बड़ा मान डालने का कोई तरीका है?