如何解决如果所有记录均等于特定值,则从一个表中删除记录
学生桌
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 举报,一经查实,本站将立刻删除。