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

MySQL LEFT OUTER JOIN में कुछ अंतिम परिणाम जारी हो रहे हैं

यह आपके लिए यह करना चाहिए:

select 
  m.AppointmentTimeID, 
  m.AppointmentDate, 
  coalesce(sum(ap.NumberOfApplicants),0) as NoOfApplicants

from (
  -- just basically doing a cross to get all time/date combinations
  select distinct d.AppointmentTimeID, a.AppointmentDate
  from tbl_appointments a, tbl_appointmentschedule_details d
) m

left join tbl_appointments ap 
  on ap.AppointmentTimeID = m.AppointmentTimeID
  and ap.AppointmentDate = m.AppointmentDate

where m.AppointmentDate between '2015-10-16' and '2015-10-17'

group by m.AppointmentDate, m.AppointmentTimeID
order by m.AppointmentDate, m.AppointmentTimeID

SQLFiddle उदाहरण:http://sqlfiddle.com/#!9/1e632/15

Results:
| AppointmentTimeID |           AppointmentDate | NoOfApplicants |
|-------------------|---------------------------|----------------|
|                22 | October, 16 2015 00:00:00 |              0 |
|                23 | October, 16 2015 00:00:00 |              3 |
|                24 | October, 16 2015 00:00:00 |              3 |
|                25 | October, 16 2015 00:00:00 |              1 |
|                26 | October, 16 2015 00:00:00 |              0 |
|                22 | October, 17 2015 00:00:00 |              4 |
|                23 | October, 17 2015 00:00:00 |              0 |
|                24 | October, 17 2015 00:00:00 |              0 |
|                25 | October, 17 2015 00:00:00 |              0 |
|                26 | October, 17 2015 00:00:00 |              0 |

चीजों को थोड़ा तेज करने के लिए, आपको कुछ अनुक्रमण से लाभ हो सकता है:

create index idx_tbl_appointments_apptdate_timeid on tbl_appointments(AppointmentDate, AppointmentTimeID);

create index idx_tbl_appointmentschedule_details_TimeID on tbl_appointmentschedule_details(AppointmentTimeID);

क्वेरी संशोधन:

select 
  m.AppointmentTimeID, 
  m.AppointmentDate, 
  coalesce(sum(ap.NumberOfApplicants),0) as NoOfApplicants
from (
  select distinct AppointmentTimeID, AppointmentDate 
  from (select distinct AppointmentTimeID from tbl_appointmentschedule_details) one
  cross join
  (select distinct AppointmentDate from tbl_appointments
   where AppointmentDate between '2015-10-16' and '2015-10-17') two
) m
left join tbl_appointments ap 
  on ap.AppointmentTimeID = m.AppointmentTimeID
  and ap.AppointmentDate = m.AppointmentDate
where m.AppointmentDate between '2015-10-16' and '2015-10-17'
group by m.AppointmentDate, m.AppointmentTimeID
order by m.AppointmentDate, m.AppointmentTimeID

SQLFiddle उदाहरण:http://sqlfiddle.com/#!9/0de6d7/1

ध्यान दें कि मैंने इस क्वेरी में दो स्थानों में दिनांक अवधि जोड़ी है। देखें कि यह क्वेरी आपके लिए कैसा प्रदर्शन करती है।



  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 डेटाबेस के लिए स्वचालित विफलता को कैसे सेटअप करें

  3. दिनांक और समय कॉलम के साथ Mysqli bind_param का उपयोग करना?

  4. टेबल इनर जॉइन से चयन * क्यों करता है..ऑन इंटरसेक्टिंग कॉलम को दो बार दिखाता है?

  5. ऑटो इंक्रीमेंट फ़ील्ड का उपयोग करके ट्रिगर डालने से पहले/बाद में