如果有另一行具有“BETTER”值,则从表中删除一行

时间:2013-04-17 14:23:39

标签: mysql sql-update delete-row

我无法确定一个描述我的问题的问题。

但是..这就是我想要实现的目标

有一张表格可存储出现在考试中的学生的成绩。

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

如果删除无效,可能会将最佳值插入另一个表并截断此值。

2 个答案:

答案 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'

如果存在匹配的传递行,则只会删除失败行。如果有“好”结果而不是“通过”,则必须相应地调整条件。