子查询都是对本身结果的整理  请大神赐教
SELECT
nl.real_name,
nt.id,nt.user_id,nt.schedule_id,nt.level_id,nt.task_id,nt.task_begin_time,nt.task_end_time,nt.teacher_name,nt.task_name, (
SELECT 
count(distinct nl.real_name)
FROM
ns_schedule_task nt
LEFT JOIN ns_user_login nl ON nt.user_id = nl.user_id
LEFT JOIN ns_user_student ns ON ns.user_id = nl.user_id
LEFT JOIN ns_schedule_level nsl ON nsl.id = nt.level_id
WHERE
ns.teacher_id = 746
AND nsl.level_plan_date = "2016-07-04"
) Namenumber,
 (select count(nt.id) FROM
ns_schedule_task nt
LEFT JOIN ns_user_login nl ON nt.user_id = nl.user_id
LEFT JOIN ns_user_student ns ON ns.user_id = nl.user_id
LEFT JOIN ns_schedule_level nsl ON nsl.id = nt.level_id
WHERE
ns.teacher_id = 746
AND nsl.level_plan_date = "2016-07-04" )  taskNm,
 (select count(nt.status) FROM
ns_schedule_task nt
LEFT JOIN ns_user_login nl ON nt.user_id = nl.user_id
LEFT JOIN ns_user_student ns ON ns.user_id = nl.user_id
LEFT JOIN ns_schedule_level nsl ON nsl.id = nt.level_id
WHERE
ns.teacher_id = 746
AND nsl.level_plan_date = "2016-07-04" and nt.status=3 )  finishNm,
(select count(nt.status) FROM
ns_schedule_task nt
LEFT JOIN ns_user_login nl ON nt.user_id = nl.user_id
LEFT JOIN ns_user_student ns ON ns.user_id = nl.user_id
LEFT JOIN ns_schedule_level nsl ON nsl.id = nt.level_id
WHERE
ns.teacher_id = 746
AND nsl.level_plan_date = "2016-07-04" and nt.status!=3 )  unfinishNm
 
FROM
ns_schedule_task nt
LEFT JOIN ns_user_login nl ON nt.user_id = nl.user_id
LEFT JOIN ns_user_student ns ON ns.user_id = nl.user_id
LEFT JOIN ns_schedule_level nsl ON nsl.id = nt.level_id
WHERE
ns.teacher_id = 746
AND nsl.level_plan_date = "2016-07-04"

解决方案 »

  1.   

    建议楼主直接给出需求,或者让别人从需求开始写SQL语句会更好一些,否则理解这个SQL语句反而可能还要花时间,甚至错误理解。
      

  2.   

    如果楼主学过其他语言,对于这种多次用同样的sql查询只为了取两个不同的字段,那肯定是能看出问题的
      

  3.   

    代码看着好复杂呀,帮你格式化一下,看上去就清晰多了。SELECT  nl.real_name ,
            nt.id ,
            nt.user_id ,
            nt.schedule_id ,
            nt.level_id ,
            nt.task_id ,
            nt.task_begin_time ,
            nt.task_end_time ,
            nt.teacher_name ,
            nt.task_name ,
            ( SELECT    COUNT(DISTINCT nl.real_name)
              FROM      ns_schedule_task nt
                        LEFT JOIN ns_user_login nl ON nt.user_id = nl.user_id
                        LEFT JOIN ns_user_student ns ON ns.user_id = nl.user_id
                        LEFT JOIN ns_schedule_level nsl ON nsl.id = nt.level_id
              WHERE     ns.teacher_id = 746
                        AND nsl.level_plan_date = "2016-07-04"
            ) Namenumber ,
            ( SELECT    COUNT(nt.id)
              FROM      ns_schedule_task nt
                        LEFT JOIN ns_user_login nl ON nt.user_id = nl.user_id
                        LEFT JOIN ns_user_student ns ON ns.user_id = nl.user_id
                        LEFT JOIN ns_schedule_level nsl ON nsl.id = nt.level_id
              WHERE     ns.teacher_id = 746
                        AND nsl.level_plan_date = "2016-07-04"
            ) taskNm ,
            ( SELECT    COUNT(nt.status)
              FROM      ns_schedule_task nt
                        LEFT JOIN ns_user_login nl ON nt.user_id = nl.user_id
                        LEFT JOIN ns_user_student ns ON ns.user_id = nl.user_id
                        LEFT JOIN ns_schedule_level nsl ON nsl.id = nt.level_id
              WHERE     ns.teacher_id = 746
                        AND nsl.level_plan_date = "2016-07-04"
                        AND nt.status = 3
            ) finishNm ,
            ( SELECT    COUNT(nt.status)
              FROM      ns_schedule_task nt
                        LEFT JOIN ns_user_login nl ON nt.user_id = nl.user_id
                        LEFT JOIN ns_user_student ns ON ns.user_id = nl.user_id
                        LEFT JOIN ns_schedule_level nsl ON nsl.id = nt.level_id
              WHERE     ns.teacher_id = 746
                        AND nsl.level_plan_date = "2016-07-04"
                        AND nt.status != 3
            ) unfinishNm
    FROM    ns_schedule_task nt
            LEFT JOIN ns_user_login nl ON nt.user_id = nl.user_id
            LEFT JOIN ns_user_student ns ON ns.user_id = nl.user_id
            LEFT JOIN ns_schedule_level nsl ON nsl.id = nt.level_id
    WHERE   ns.teacher_id = 746
            AND nsl.level_plan_date = "2016-07-04"