子查询中的两个过滤器

问题描述 投票:0回答:1

我已经在谷歌上搜索并浏览其他答案一段时间了,但找不到任何有用的东西。

我有 5 个维度表(学生和考试是两个)和一个事实表(入学)。

我正在尝试获取在 2023 年参加过难度级别考试的学生的姓名。此代码不会返回任何错误,但也没有给我任何结果。

SELECT 
    s.First_Name, 
    s.Last_Name
FROM Students s
JOIN 
Enrolment e
ON s.Student_ID = e.Student_ID 
WHERE e.Enrolment_Date IN (SELECT 
                            YEAR(e.Enrolment_Date) = '2023' 
                        FROM 
                            Enrolment 
                        WHERE Exam_ID IN (SELECT                                                         
                                             Exam_ID
                                          FROM
                                             Exams
                                           WHERE
                                             Difficulty_Level = 'Hard'));
mysql subquery
1个回答
0
投票

我会使用联接。 MySQL 仍然比子查询更可靠地优化连接。

SELECT 
    s.First_Name, 
    s.Last_Name
FROM Students s
JOIN Enrolment e ON s.Student_ID = e.Student_ID 
JOIN Exams x ON e.Exam_ID = x.Exam_ID
WHERE e.Enrolment_Date >= '2023-01-01'
    AND e.Enrolment_Date < '2024-01-01' 
    AND x.Difficulty_Level = 'Hard';
© www.soinside.com 2019 - 2024. All rights reserved.