2016-11-19 2 views
0

je dois supprimer les doublons de ma table mais MySQL ne fonctionne pas correctementMySQL, supprimer les doublons

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

Je dois garder ces dossiers

00011 1  3  0  0 
00022 0  3  0  0

aussi je besoin de conserver les enregistrer avec toute la valeur zéro préf ceci est mon 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)' est pas une expression booléenne. Ce n'est probablement pas ce que vous attendez. –

+1

Aussi ... il n'est pas clair dans la question comment vous savez quel enregistrement conserver pour un empID donné. Quelles sont les règles qui déterminent cela? –

+0

Je dois garder le record avec le nombre maximum de Pref – Niloo

Répondre

0

Votre problème est assez complexe, et des informations données I doivent faire une hypothèse pour y répondre .. Supposons il n'y a pas d'enregistrement avec la même empID avoir le même nombre maximal 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) 

Si l'hypothèse est pas correcte, le code sera toujours montrer double pour empID avec la même nombre maximum pref plus d'un .. pour le fixer est beaucoup plus compliqué que ce code ..

0

Vous pouvez obtenir vos données en utilisant GROUP BY et GREATEST:

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

vous pouvez l'utiliser pour trouver des lignes directement dans le tableau emp utilisant exists ou in