删除记录为空并连接到另一个表的记录

时间:2019-01-01 15:53:14

标签: sql oracle

如何删除列为空但我要删除的记录是另一个表的一部分的记录。

例如,我想删除一个没有学生的课程。课程表通过course_id与学生链接

DELETE COURSE_ID
FROM COURSE
INNER JOIN STUDENT
ON COURSE.COURSE_ID = STUDENT.COURSE_ID
WHERE STUDENT_ID IS NULL;

2 个答案:

答案 0 :(得分:2)

对于您的问题,如前所述,您可以使用EXISTS

DELETE FROM COURSE
WHERE EXISTS (SELECT 1
              FROM STUDENT
              WHERE COURSE.COURSE_ID = STUDENT.COURSE_ID AND
                    STUDENT_ID IS NULL
             );

但是,我怀疑您想从COURSE删除行中没有STUDENT的行。为此,您可以使用NOT EXISTS

DELETE FROM COURSE
WHERE NOT EXISTS (SELECT 1
                  FROM STUDENT
                  WHERE COURSE.COURSE_ID = STUDENT.COURSE_ID
                 );

答案 1 :(得分:0)

也许您只需要一个子查询,以供其他表中的引用(如果存在)。

          DELETE
           FROM COURSE
          WHERE COURSE.COURSE_ID IN (SELECT 
           COURSE_ID FROM STUDENT where student_id IS 
          NULL)