我有一个表,我需要从中删除具有相同代码和不同状态的元素。
例如,这是我的表:
+-------------+------------+
| Code | Status |
+-------------+------------+
| 01 | 1 |
+-------------+------------+
| 02 | 1 |
+-------------+------------+
| 03 | 1 |
+-------------+------------+
| 01 | 2 |
+-------------+------------+
输出应该是这样的:
+-------------+------------+
| Code | Status |
+-------------+------------+
| 02 | 1 |
+-------------+------------+
| 03 | 1 |
+-------------+------------+
这意味着我需要删除具有状态1和2的代码。在第一个表中,您可以看到代码01有两个具有两种状态,状态1和状态2以及第二个表中不再可见。
如何用mysql做到这一点?
答案 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);