【问题标题】:Why is the following SQL Query returning an empty result?为什么以下 SQL 查询返回空结果?
【发布时间】:2021-05-09 23:06:37
【问题描述】:

我有以下表结构:

1 - Course(course_id, course_nam, language, course_price, create_date, average_rating, category, course_description, certifica_price, course_creator_id)

2 - 学生(student_id,钱包)

3 - 折扣(discount_id、discounted_course_id、allower_course_creator_id、is_allowed、start_date、end_date、百分比)

4 - 注册(学生 ID、课程 ID、购买价格、购买日期)

我想编写一个查询,该查询将返回 id=$person_id 的课程创建者的每门课程以及以下内容:

1 - 如果该课程有折扣,并且当前日期介于该折扣的 start_date 和 end_date 之间,则该课程的价格将按百分比降低。

2 - 已注册该课程的学生人数。如果没有这样的学生,则为 0。

3 - Course_id、course_name、average_rating、折扣百分比和价格。

我有以下问题

SELECT  C.course_id, C.course_name, C.average_rating, total_student, 
                            D.percentage, (CASE WHEN CURRENT_DATE >= D.start_date AND 
                            CURRENT_DATE < D.end_date AND D.is_allowed
                            THEN C.course_price * (( 100 - D.percentage ) / 100)
                            ELSE C.course_price END) as price
                    FROM        course C LEFT OUTER JOIN discount D ON 
                                C.course_id = D.discounted_course_id, 
                                (SELECT     course_id, COUNT(student_id) AS total_student
                                FROM        enrolls
                                WHERE   course_id IN (SELECT course_id
                                                    FROM course
                                                    WHERE course_creator_id = '$person_id')
                                                    GROUP BY    course_id) course_student
                    WHERE   course_student.course_id = C.course_id

当 student、discount、enrolls 表为空时,查询不会返回任何内容。我希望它返回 total_student = 0(或 null)、percentage = 0(或 null,无所谓)、价格(课程原价)的课程信息。

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    尝试做这样的事情

    
    SELECT  
      C.course_id, C.course_name, C.average_rating, total_student, 
      D.percentage, (CASE WHEN CURRENT_DATE >= D.start_date AND 
      CURRENT_DATE < D.end_date AND D.is_allowed THEN C.course_price * (( 100 - D.percentage ) / 100)
        ELSE C.course_price END) as price
    FROM course C 
    LEFT OUTER JOIN discount D 
      ON  C.course_id = D.discounted_course_id
    LEFT JOIN (
      SELECT course_id, COUNT(student_id) AS total_student
      FROM        enrolls
      WHERE   course_id IN (
        SELECT course_id
        FROM course
        WHERE course_creator_id = '$person_id')
      ON C.course_id = course_student.course_id
      GROUP BY    course_id) course_student
    
    
    

    【讨论】:

    • 我收到以下错误,先生:“您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册,了解在 'LEFT JOIN (SELECT course_id, COUNT(student_id) AS total_student FROM ...' 在第 9 行"
    • @user14807402 而您没有注意到LEFT JOIN 之前的额外逗号?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    相关资源
    最近更新 更多