Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1404 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Update & Group by

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] Update & Group by

n°2090874
Twiddy
Posté le 22-07-2011 à 15:41:19  profilanswer
 

Bonjour,

 

Je cherche un technique performante pour réaliser la mise à jour d'un identifiant sur plusieurs lignes d'une table (SQL Server 2005) :

Table azerty :
id (int identity)
id2 (int)
ch1 (varchar(x))
ch2 (varchar(y))
ch3 (varchar(z))
ch4 (varchar(a))
ch5 (varchar(b))
...

 

Le but est de repérer les doublons sur plusieurs champs ch1, ch2, ch3, ch4, etc... et de coller un identifiant à toutes les lignes ayant les mêmes valeurs pour ces champs.

 

Exemple avec champs à grouper :

1 NULL toto tata
2 NULL toto titi
3 NULL tutu titi
4 NULL toto tata
5 NULL tutu titi

 

Après update je voudrais avoir :

1 1 toto tata
2 2 toto titi
3 3 tutu titi
4 1 toto tata
5 3 tutu titi

 

Donc logiquement je peux partir sur :

SELECT MIN(id) AS id, ch1, ch2
INTO #tmp
FROM azerty
GROUP BY ch1, ch2

 

Puis :

UPDATE a SET a.id2 = t.id
FROM azerty a, #tmp t
WHERE a.ch1 = z.ch1
AND a.ch2 = z.ch2

 

Le problème c'est que j'ai au moins une 30aine de champs à grouper donc je trouve ça laborieux de générer une table temporaire pour ensuite mettre à jour les données avec une jointure crado.

 

Existe-il un moyen pour faire ça en une seule fois sans avoir une jointure sur 30 champs (qui plus est avec des tests à la con dans cas de valeurs NULL) ?

 

Merci d'avance :)

 


Message édité par Twiddy le 22-07-2011 à 16:30:42
mood
Publicité
Posté le 22-07-2011 à 15:41:19  profilanswer
 

n°2090885
fred777888​999
Posté le 22-07-2011 à 16:10:14  profilanswer
 

Quelle est la base de donnees que tu utilise ?
En oracle, avec un rownum tu peux essayer un truc style

Code :
  1. select id1, id2, max(rownum)
  2. from table
  3. group by id1, id2


qui ne te donnera pas un numero sequenciel mais te fournira un referent unique pour tes doublons.

n°2090890
Twiddy
Posté le 22-07-2011 à 16:29:16  profilanswer
 

Je suis sous SQL Server 2005...
 
J'avoue ne pas comprendre ton raisonnement, mon problème c'est de trouver un raccourci pour effectuer l'update cité sans avoir à comparer les nombreux champs pour faire ma jointure entre ma table à mettre à jour et ma table temporaire.
 
C'est peut-être plus clair si je ne prends pas des identifiants dans l'ordre :
 
Exemple avec champs à grouper :

12 NULL toto tata
23 NULL toto titi
32 NULL tutu titi
48 NULL toto tata
54 NULL tutu titi


 
Après update je voudrais avoir :  

12 12 toto tata
23 23 toto titi
32 32 tutu titi
48 12 toto tata
54 32 tutu titi


n°2091327
Oliiii
Posté le 25-07-2011 à 11:29:45  profilanswer
 

Non, tu es condamné  a comparer ta 30ene de champs.  
Il y a bien un moyen de se passer de la table temporaire mais point de vue perf et complexité ca reviens au meme.

n°2091328
Twiddy
Posté le 25-07-2011 à 11:33:52  profilanswer
 

Arf, merci. Je m'en doutais un peu...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Update & Group by

 

Sujets relatifs
1 requete SQL avec deux Requete DistincteProblème avec tables SQL et TIMESTAMP !
[Resolu] GROUP BY Sur deux champsExcel et SQL requete avec deux condition?
You have an error in your SQL syntax; check the manual that correspond[Résolu] " update or insert " selon une condition
Bloqué sur des requetes SQL basiques dans Accessproblème (opérateur manquant) dans Requete SQL sous Excel VBA
Help requête SQL[SQL] Comment faire un UPDATE avec jointures, Somme et GROUP BY ?
Plus de sujets relatifs à : [SQL] Update & Group by


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR