MySQL左连接与交叉连接查询问题

时间:2015-10-20 00:27:31

标签: mysql sql select join

我有2个表请查看链接和当前运行的查询 http://sqlfiddle.com/#!9/40d9d/2

我正面临的问题  1.花费大量时间执行  2.我想如果在日期范围日期'x'之间没有tbl_appoitmens表中的信息那么多显示结果为零,但tbl_appointmentschedule_details中的所有AppointmentTimeID。
 3.我想验证来自AppointmentTypeID的这3个新列AppointemntStatusAvailableInMarkettbl_appointments
 4. ScheduleID来自tbl_appointmentschedule_details

查询输出速度确实很重要我们可能会同时选择2 - 3年的记录。

结果我想要显示像

AppointmentTimeID   AppointmentDate     NoOfApplicants
22                  2015-10-16              2
23                  2015-10-16              4
24                  2015-10-16              5
25                  2015-10-16              2
26                  2015-10-16              2
22                  2015-10-17              5
23                  2015-10-17              2
24                  2015-10-17              2
25                  2015-10-17              2
26                  2015-10-17              2
22                  2015-10-18              0
23                  2015-10-18              0
24                  2015-10-18              0
25                  2015-10-18              0
26                  2015-10-18              0

1 个答案:

答案 0 :(得分:0)

试试这个:

select t4.AppointmentTimeID, t4.AppointmentDate,ifnull(t5.NumberOfApplicants,0)
from
    (select distinct t2.AppointmentTimeID, t1.AppointmentDate
  from tbl_appointmentschedule_details t2 join (select t.AppointmentDate from (
SELECT adddate('2015-10-16', @rownum := @rownum + 1) as 'AppointmentDate' FROM tbl_appointments
JOIN (SELECT @rownum := -1) r
LIMIT 31
) t 
where t.AppointmentDate between '2015-10-16' and '2015-10-18') t1)  t4
left join 
    (SELECT t2.AppointmentTimeID,t1.AppointmentDate,sum(t1.NumberOfApplicants) as 'NumberOfApplicants'
    FROM tbl_appointmentschedule_details t2
    LEFT JOIN tbl_appointments t1 on t2.AppointmentTimeID=t1.AppointmentTimeID
    WHERE t1.AppointmentStatus='Pending' AND t1.AvailableInMarket=0
    GROUP BY t2.AppointmentTimeID,t1.AppointmentDate) t5 
on t4.AppointmentDate=t5.AppointmentDate and t4.AppointmentTimeID=t5.AppointmentTimeID
having t4.AppointmentTimeID!=0
order by t4.AppointmentDate,t4.AppointmentTimeID;