2013-04-17 34 views
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表,我想刪除體現一個「壞」的結果特定的行如果存在對同一個學生+主題組合一個「好」的結果另一行。 ie .. Andy第一次在數學上失敗,但稍後通過。所以第一行應該被刪除。而且,鮑勃有一次通過了科學,但在第二次嘗試中失敗了。所以第二次嘗試應該被刪除。

我想表:

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

什麼被認爲是「壞」,什麼被認爲是「好」? – brbcoding

+0

如果它是一個失敗,這是不好的。如果它是一個合格的,它的好 –

+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 
+0

它仍然存儲最新結果的值。 最新這裏指的是表中最後一個值。 –

+0

忽略先前的評論。我的表格格式不正確。現在工作很好。謝謝。 –

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' 

這隻會刪除,如果有匹配的通排故障行。如果有其他「好」的結果比「合格」,你將不得不相應調整條件。

相關問題