2016-11-19 142 views
0

我需要从我的表中删除重复项,但MySQL的工作不正常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空值 这是我的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 
+0

'max(Pref01)'不是一个布尔表达式。这可能不会达到你的期望。 –

+1

另外...在问题中不清楚你是如何知道为给定的empID保留哪条记录的。什么是决定这个的规则? –

+0

我需要保留记录与最大普雷夫编号 – Niloo

回答

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数量不止一个..复制,以解决它比这个代码复杂得多..

0

您可以让您使用GROUP BYGREATEST数据:

SELECT empID, max(GREATEST(Pref01, Pref02, Pref03, Pref04)) FROM emp GROUP BY empID 

您可以使用此使用existsin找到直接在表emp行