2016-11-19 163 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行