2017-07-15 15 views
0

同じコードと異なるステータスを持つ要素を削除する必要があるテーブルがあります。例えば、これは私のテーブルいくつかのコーディングに従って重複レコードを削除するクエリ

されています:

+-------------+------------+ 
| Code  | Status  | 
+-------------+------------+ 
| 01   | 1   |     
+-------------+------------+ 
| 02   | 1   |    
+-------------+------------+ 
| 03   | 1   |    
+-------------+------------+ 
| 01   | 2   |    
+-------------+------------+ 

出力はこの1つのようにする必要があります:

+-------------+------------+ 
| Code  | Status  | 
+-------------+------------+ 
| 02   | 1   |    
+-------------+------------+ 
| 03   | 1   |    
+-------------+------------+ 

それは私が最初ではステータス1と2を持っているコードを排除する必要があることを意味しますテーブルには、コード01に2つのステータス、ステータス1とステータス2があり、2つ目のテーブルにはもう表示されていないことがわかります。

これを行う方法は?元の表の重複がある場合

select t.* 
from t 
where not exists (select 1 from t t2 where t2.code = t.code and t2.status <> t.status); 

、これは重複を返します。

答えて

2

は、ここに1つの方法です。あなただけの単一のステータスを持っているコードが必要な場合は別の方法として、コードごとに1行で、あなたはgroup byを使用することができます。

select t.code, max(t.status) as status 
from t 
group by t.code 
having min(t.status) = max(t.status); 
+0

そう単純で、おかげでたくさん。 – Josef

関連する問題