MySQL,删除重复项

MySQL, Remove duplicate

我需要从 table 中删除重复项,但 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 

您可以使用 GROUP BYGREATEST:

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

您可以使用它直接在 emp table 中使用 existsin

查找行

你的问题很复杂,根据给定的信息,我必须做出假设才能回答它.. 假设没有具有相同 empID 的记录具有相同的最大优先数...

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 的重复项,相同的最大偏好数超过 1.. 修复它比此代码复杂得多..