【问题标题】:find missing values between two tables查找两个表之间的缺失值
【发布时间】:2015-05-01 11:00:31
【问题描述】:

我有两个名为 selected_courses 和 all_courses 的表。我想用 sql 查询查找未选择的课程。 表格:

selected_course               all_courses
+---------------+            +------------+
student_id|course_id          course_id|course_name
+---------------+            +------------+
1             A1                A1
1             A2                A2
1             A3                A3 
2             A2                A4
2             A3

select all_courses.* from all_courses where not exist(select course_id from selected_courses where student_id='1')

此查询不返回任何内容

select all_courses.* from all_courses left join selected_courses on selected_courses.course_id =all_courses.course id

在这个查询中我不能应用 where student_id='1' 条件。

如何应用此条件或使用不存在?

【问题讨论】:

    标签: compare exists not-exists


    【解决方案1】:

    尝试进行左连接,然后排除所有具有空值的条目

    SELECT all_courses.*, sc.student_id
    FROM all_courses AS ac
    LEFT JOIN selected_courses AS sc ON (sc.course_id = al.course id)
    WHERE sc.student_id IS NULL
    

    【讨论】:

    • 它什么都不返回。如果我改为不为空,它会给我学生选择的课程。
    • 您使用的是什么 SQL 引擎? MySQL、MariaDB、MSSQL?
    • 我正在使用 MSSQL。我发现使用不存在从不存在的 all_courses 中选择 all_courses.courses_id(在 selected.course_id=all_courses.course_id 和 selected_courses.student_id='1' )
    • 好的,添加它作为答案并选择它作为正确的。
    【解决方案2】:

    如果您想为特定学生执行此操作,请执行以下操作:

    SELECT a.course_id, a.course_name
    FROM all_courses a
    LEFT JOIN selected_courses s ON a.course_id = s.course id AND s.student_id  = 1
    WHERE s.student_id IS NULL
    

    【讨论】:

      【解决方案3】:

      我发现使用不存在

      select all_courses.courses_id from all_courses where not exists (select selected_courses.course_id from taken_courses where selected.course_id=all_courses.course_id and selected_courses.student_id='1')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-15
        • 1970-01-01
        相关资源
        最近更新 更多