使用SQL删除dulicate行

时间:2015-05-13 12:53:20

标签: sql

我想知道是否有办法从表中删除重复值。键'distinct'将获取唯一的行,但是如果列中的一个值不同,则不会。所以只是想知道这是否可以通过任何方式实现。希望以下示例有所帮助。

例如:在下表中,Emp_ID 1234有两个条目,具有两个不同的优先级。我的输出应该单独考虑优先级较高的行。可能吗?

My table
+---------+------+--------+-------+
| Employee_ID| priority  | gender |
+------------+-----------+--------+
| 1234       |   1       | F      |
| 1234       |   10      | F      |
| 5678       |    2      | M      |
| 5678       |   25      | M      |
| 9101       |   45      | F      |
+------------+-----------+--------+

输出

+---------+------+--------+-------+
| Employee_ID| priority  | gender |
+------------+-----------+--------+
| 1234       |    1      | F      |
| 5678       |    2      | M      |
| 9101       |   45      | F      |
+------------+-----------+--------+

2 个答案:

答案 0 :(得分:2)

DELETE
FROM Table t
WHERE EXISTS ( SELECT Employee_ID FROM Table WHERE Employee_ID = t.Employee_ID AND priority < t.Priority)

如果您真的想要从表中删除它们。 Exists部分也可以在select查询中使用,以将值保留在Original表中。

SELECT *
FROM Table t
WHERE NOT EXISTS (SELECT Employee_ID FROM Table WHERE Employee_ID = t.Employee_ID AND priority > t.Priority)

答案 1 :(得分:0)

select Employee_ID,max(priority) as priority,gender
from table
group by Employee_ID,gender