当前位置: 首页 > 知识库问答 >
问题:

为什么以下SQL查询返回空结果?

陆卓
2023-03-14

我有以下表格结构:

1-课程(course_id、course_nam、语言、course_price、create_date、average_rating、course_description、certifica_price、course_creator_id)

2-学生(学生证、钱包)

3-折扣(折扣id、折扣课程id、允许的许可课程id、开始日期、结束日期、百分比)

4-报名(student_id、course_id、purchased_price、purchase_date)

我想写一个查询,它将返回id为$person\u id的课程创建者的每门课程以及以下内容:

1-如果该课程有折扣,且当前日期介于该折扣的开始日期和结束日期之间,则课程价格将根据百分比降低。

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

3-课程id、课程名称、平均评分、折扣百分比和价格。

我有以下疑问

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

当学生、折扣、注册表为空时,查询不返回任何内容。我希望它返回课程信息total_student=0(或空),百分比=0(或空,没关系),价格(课程的原始价格)。

共有1个答案

农飞星
2023-03-14

试试做这样的事


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查询,我在flink工作中使用。< code>mysql_table是使用JDBC连接器创建的,而< code>kafa_source表是从传入的kafka流创建的。 我在两者之间执行时态连接,当我在Flink的sql-client CLI中检查时,运行良好(用< code>flink-faker测试)。内部查询工作得非常好,并且正在打印结果。有人能帮助我找出这个问题吗? 编辑:我

  • 问题内容: 我有一堆应聘者,他们有一些或多个工作,每个人都在公司工作,并且使用了一些技能。 坏的ascii艺术如下: 这是我的数据库: 。 。 。 。 这是我对查询的尝试(请注意,我打算将通配符更改为字段名称;我只是想使某些功能生效): HediSql说 查询出了什么问题?我希望从不良的ascii艺术中可以清楚地知道我要达到的目标。 (此外,它对我连接表的顺序是否有任何速度差异?我将担心新的MyS

  • 我正在查询SQL数据库,但由于某些原因,结果项会随机返回。这是我的密码: searchFriendEmailArrayNew是一个电子邮件地址数组,因此当我查询数据库表时,它会使用电子邮件来查找该用户。数组始终保持一致且顺序相同: user1@email.com 查询总是按照这个顺序进行的。 然后,我查询用户的所选字段,在本例中,我查询的是“isriding”字段。此字段是返回true或false

  • 我正在使用Android的纵隔检索我用我的应用程序录制的视频文件的持续时间/日期。它对旧文件很好,我记录的最新文件确实返回空(不是空)光标。我不明白为什么会发生这种情况,是纵隔没有立即更新还是我下面使用的代码有问题?谢谢你的帮助!

  • 问题内容: 如果我有一个工作表,例如: 我想要一个查询,该查询将按日期对它们进行分组,并计算该日期的每个状态和总状态的发生率。 这给了我 我现在想将其压缩为每个唯一日期的一行,并为每个日期安排某种多列布局。一个约束是5个可能的单词中的任何一个,但每个日期可能没有每个状态之一。另外,我希望每天总计所有状态。因此,所需的结果将如下所示: 列可以通过类似的方式动态构建 对于不包含任何此类状态的日期,结果