根据某些条件查询消除重复记录

时间:2017-07-15 13:43:56

标签: mysql sql

我有一个表,我需要从中删除具有相同代码和不同状态的元素。

例如,这是我的表:

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

输出应该是这样的:

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

这意味着我需要删除具有状态1和2的代码。在第一个表中,您可以看到代码01有两个具有两种状态,状态1和状态2以及第二个表中不再可见。

如何用mysql做到这一点?

1 个答案:

答案 0 :(得分:2)

这是一种方法:

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

如果原始表中有重复项,则会返回重复项。或者,如果您只想要具有单一状态的代码,每个代码一行,则可以使用group by

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