MySQL,删除重复

时间:2016-11-19 01:19:36

标签: mysql sql database-normalization

我需要从表中删除重复项,但MySQL无法正常工作

Create table emp
( empID INT(5) PRIMARY KEY,
Pref01 int(1),
Pref02 int(1),
Pref03 int(1),
Pref04 int(1))
empID, Pref01, Pref02, Pref03, Pref04
=====================================
00011    1       2       0       0
00011    1       3       0       0
00022    1       1       0       0
00022    0       3       0       0

我需要保留这些记录

00011  1       3       0       0 
00022  0       3       0       0 

我还需要保留所有pref null值的记录 这是我的sql:

select empID 
FROM emp 
where max(Pref01) or max (Pref02) or max(Pref03) or max(Pref04) 
    or Pref01 is null or Pref02 is null or Pref03 is null or Pref04 is null 

2 个答案:

答案 0 :(得分:0)

您可以使用GROUP BYGREATEST

获取数据
SELECT empID, max(GREATEST(Pref01, Pref02, Pref03, Pref04)) FROM emp GROUP BY empID

您可以使用此功能直接在emp表中使用existsin

查找行

答案 1 :(得分:0)

你的问题非常复杂,有了给定的信息,我必须做出假设才能回答它。 假设没有相同empID的记录具有相同的最大pref数...

SELECT A.* 
FROM emp AS A 
    INNER JOIN (
        SELECT empID, MAX(GREATEST(Pref01, Pref02, Pref03, Pref04)) AS MaxPref 
        FROM emp GROUP BY empID
    ) AS B ON A.empID = B.empID
WHERE
    (Pref01 = MaxPref OR Pref02 = MaxPref OR Pref03 = MaxPref OR Pref04 = MaxPref)
    OR 
    (Pref01 IS NULL AND Pref02 IS NULL AND Pref03 IS NULL AND Pref04 IS NULL)

如果假设不正确,那么代码仍然会显示empID的副本,其中相同的最大pref数不止一个..修复它比这段代码复杂得多..