1

我无法很好地提出一个正确描述我的问题的问题。

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

有一个表格存储学生参加考试的结果。

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

如果删除不起作用,可能会将最佳值插入另一个表并截断该表。

4

2 回答 2

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
于 2013-04-17T14:27:00.917 回答
1

使用 mysql 特殊的多表删除语法

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'

如果有匹配的通过行,这只会删除失败的行。如果除了“通过”之外还有其他“好”的结果,您将不得不相应地调整条件。

于 2013-04-17T14:30:07.210 回答