2 votes

Déduplication des données SQL par ligne

Dans le prolongement d'un question précédente J'essaie de mettre de l'ordre dans une table SQL contenant des numéros de téléphone. J'ai besoin de supprimer les numéros en double par ligne - pas sur l'ensemble de la table. Par exemple, mon tableau ressemble à :

 | CustomerID | Tel1     | Tel2      | Tel3     | Tel4      | Tel5      | Tel6     |
 | Cust001    | 01222222 | 012333333 | 07111111 | 07222222  | 01222222  | NULL     |
 | Cust002    | 07444444 | 07555555  | 015333333| 07555555  | NULL      | NULL     |
 | Cust003    | 01222222 | 017777777 | 07888888 | 017777777 | 016666666 | 01222222 |

et j'aimerais supprimer tout numéro qui apparaît deux fois ou plus dans la même ligne... donc le tableau ressemblerait à ça :

 | CustomerID | Tel1     | Tel2      | Tel3     | Tel4     | Tel5      | Tel6   |
 | Cust001    | 01222222 | 012333333 | 07111111 | 07222222 | NULL      | NULL   |
 | Cust002    | 07444444 | 015333333 | 07555555 | NULL     | NULL      | NULL   |
 | Cust003    | 01222222 | 017777777 | 07888888 | 016666666| 013333    | NULL   |

L'ordre des numéros de téléphone n'a pas d'importance, tant que les numéros sont dans les premières colonnes et que les NULS sont à "droite".

SQLFiddle est ici - quelqu'un peut-il suggérer comment supprimer efficacement les valeurs en double par ligne ?

3voto

peterm Points 72466

Vous pouvez essayer l'approche directe, surtout s'il s'agit d'une action ponctuelle ou si vous faites le ménage de temps en temps.

UPDATE phonenumbers SET tel6 = NULL
 WHERE tel6 IN(tel5,tel4, tel3, tel2, tel1);
UPDATE phonenumbers SET tel5 = NULL
 WHERE tel5 IN(tel4, tel3, tel2, tel1);
UPDATE phonenumbers SET tel4 = NULL
 WHERE tel4 IN(tel3, tel2, tel1);
UPDATE phonenumbers SET tel3 = NULL
 WHERE tel3 IN(tel2, tel1);
UPDATE phonenumbers SET tel2 = NULL
 WHERE tel2 = tel1;

SQLFiddle

Néanmoins, je suis totalement d'accord avec @Mahmoud Gamal et @steoleary que si vous pouvez changer la DDL de votre table, vous devriez le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X