Home > OS >  How to query a table join where cross-validation from output is simplified?
How to query a table join where cross-validation from output is simplified?

Time:10-23

I am attempting to produce a table that reveals which instructors are teaching courses that they are not certified to teach.

I have two tables of data:

certification

instructor_id subject_cert
01 01
01 02
01 03
03 04
03 05
03 06
05 07
05 08
05 09

taught_courses

instructor subject_taught
01 01
01 02
01 05
03 04
03 08
05 07

I was thinking about producing a table that looks like this (I'm sure there are alternative options):

instructor subject_taught subject_cert
01 05 null
03 08 null

Here's my current code, which produces a table with too many rows, making cross-validation for subject_taught with subject_cert tedious:

SELECT
    t.instructor,
    t.subject_taught,
    c.subject_cert
FROM taught_course AS t
LEFT JOIN certification AS c
    ON t.instructor = c.instructor_id
ORDER BY
    t.instructor,
    t.subject_taught,
    c.subject_cert ASC;

What suggestions would you have? Any help will be sincerely appreciated, thank you so much for your time.

CodePudding user response:

I think you are looking for

SELECT
    t.instructor,
    t.subject_taught,
    c.subject_cert
FROM taught_course AS t
LEFT JOIN certification AS c
    ON t.instructor = c.instructor_id AND t.subject_taught = c.subject_cert
WHERE c.instructor_id IS NULL
ORDER BY
    t.instructor,
    t.subject_taught,
    c.subject_cert ASC;

This is your query, but I added a second condition (AND t.subject_taught = c.subject_cert) to the join since you want to match the subjects as well as the instructors and I added WHERE c.instructor_id IS NULL since you only want to return rows where the left join failed to find a match.

  • Related