On 24 April 2016 at 08:36, Thomas Munro <thomas.munro@enterprisedb.com> wrote:
> For example, say we want all students who have one or more exam today:
>
> SELECT s.student_id, s.name
> FROM student s
> WHERE EXISTS (SELECT 1
> FROM exam e
> WHERE e.student_id = s.student_id
> AND e.exam_date = CURRENT_DATE)
To be fair to SQL a far simpler version would be
SELECT DISTINCT student_id, name
FROM student
INNER JOIN exam USING(student_id)
WHERE exam_date=CURRENT_DATE;
To find students with no exam today (the other point of your argument):
SELECT student_id, name
FROM student
LEFT JOIN exam USING(student_id)
WHERE exam_date=CURRENT_DATE AND exam.student_id IS NULL;
Not really sure what the issue is with either of those. Once learned,
they're both very easy and straightforward.
Geoff