微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果所有记录均等于特定值,则从一个表中删除记录

如何解决如果所有记录均等于特定值,则从一个表中删除记录

学生桌

Student_ID  School          Home State  Grade      Age
85          Washington St   Colorado    Junior     22
90          Washington St   Washington  Senior     23
81          Oregon          California  Junior     21
21          Washington      Washington  Sophomore  21

出勤表

Student_ID  Active  Date
85          N       9/22/20
85          N       9/21/20
81          Y       9/22/20
81          N       9/21/20

嘿,如果我想通过查看谁仍然是活跃的学生来清理学生信息,请在Oracle DB中进行整理。通过在出勤表中按Student_ID排序,我想查找学生是否具有active ='N'的所有值。如果每个活动学生的所有值都等于'N',那么我知道他们不再是学生,我想从“学生”表(学生85)中删除记录。但是,如果只有每个学生的记录上的Active ='Y',那么我不会删除该学生的任何东西,因为我知道他们仍然在活动(学生81)。最好的方法是什么,我尝试使用all运算符,但无法获得所需的结果。以下是我一直在尝试使用的查询

DELETE /*+ parallel (a) */ FROM STUDENT a 
WHERE ( a.student_ID  = ALL
(SELECT /*+ parallel (b) */ b.student_id,b.active FROM attendance b WHERE b.active = 'N')); 

解决方法

一个选项使用not exists

delete from student s
where not exists (
    select 1 from attendance a where a.student_id = s.student_id and a.active = 'Y'
)

这也会删除完全没有出勤的学生。如果那不是您想要的,则可以使用相关子查询代替:

delete from student s
where (
    select min(active) from attendance a where a.student_id = s.student_id
) = 'N'
,

您可以使用聚合检查“ Y”行:

DELETE 
FROM STUDENT
WHERE student_ID IN
 (
   SELECT student_id
   FROM attendance
   GROUP BY student_id
   HAVING MAX(active) = 'N' -- no Y for this student
 ); 
,
NOT Exists 

在这里将是最好的选择,因为猜测您必须处理一些大表。 我第二次访问GMB的第一个查询。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。