我无法确定一个描述我的问题的问题。
但是..这就是我想要实现的目标
有一张表格可存储出现在考试中的学生的成绩。
Student Name |Roll Number| Subject | Result
Andy | 111 | Math | Fail
Bob | 112 | Science | Pass
Carl | 113 | History | Pass
Andy | 111 | Math | Pass
Bob | 112 | Science | Fail
Bob | 112 | History | Fail
Carl | 113 | History | Fail
以上是一个MySQL表,如果有另一行对同一学生+主题组合有“好”结果,我想删除反映“坏”结果的特定行。 即..安迪第一次在数学上失败但后来通过了。所以应该删除第一行。但是,鲍勃曾一度通过科学,但在第二次尝试中失败了。所以应该删除第二次尝试。
我想要的表格:
Student Name |Roll Number| Subject | Result
Bob | 112 | Science | Pass
Carl | 113 | History | Pass
Andy | 111 | Math | Pass
Bob | 112 | History | Fail
Carl | 112 | History | Fail
如果删除无效,可能会将最佳值插入另一个表并截断此值。
答案 0 :(得分:1)
使用提供的数据,您可以将其作为聚合查询执行:
select StudentName, RollNumber, Subject,
(case when MAX(Result = 'Pass') = 1 then 'Pass' else 'Fail' end) as Result
from t
group by StudentName, RollNumber, Subject
答案 1 :(得分:1)
使用mysql的特殊multiple-table delete syntax:
delete a
from results a
join results b
on b.roll_number = a.roll_number
and b.subject = a.subject
and b.result = 'Pass'
where a.result = 'Fail'
如果存在匹配的传递行,则只会删除失败行。如果有“好”结果而不是“通过”,则必须相应地调整条件。