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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Disctinct sur plusieurs champs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] Disctinct sur plusieurs champs

n°1246531
lapartdomb​re
Posté le 16-11-2005 à 09:20:30  profilanswer
 


Est ce possible de faire un select disctinct sur 2 champs? Quelque chose du style :
 

Code :
  1. select distinct(tc.ct_code, tc.et_code)
  2. from TMP_CHANTIER tc, TMP_COMPOSITION_CHAINE tcc
  3. where tc.ct_type_local = 'D'
  4.   and tc.ct_code = tcc.ct_code
  5.   and tc.et_code = tcc.et_code


 
Afin de respecter une regle de gestion de mon appli :
 

Code :
  1. Pour chaque duo ct_code et et_code de TMP_CHANTIER ayant le ct_type_local (TMP_CHANTIER) égale à 'D', le duo ct_code et et_code doit obligatoirement être référencé une seule fois au sein de la table TMP_COMPOSITION_CHAINE


 
Moi je pensais comparer le nombre de résultats en le select normal et le select distinct. Mais il refuse de faire un select disctinct sur plusieurs champs.
 
Est ce que quelqu'un a une idée?

mood
Publicité
Posté le 16-11-2005 à 09:20:30  profilanswer
 

n°1246539
olivthill
Posté le 16-11-2005 à 09:38:19  profilanswer
 

Le distinct n'est pas lié à un ou plusieurs champs.
Le distinct filtre le résultat d'une requête pour éliminer les lignes en double.

n°1246544
olivthill
Posté le 16-11-2005 à 09:45:41  profilanswer
 

Pour vérifier que le duo n'existe qu'une seule fois, il existe plusieurs techniques, comme par exemple de lister les duos et avoir une sous requête pour lister des duos sur des lignes différentes, mais c'est long et cela nécessite d'avoir les numéros des enregistrements ce qui dépend de l'implémentation de la base.
 
Donc je ense plutôt à une solution avec un count(*) :

Code :
  1. SELECT tc.ct_code, tc.et_code, count (*)
  2. from TMP_CHANTIER tc, TMP_COMPOSITION_CHAINE tcc
  3. where tc.ct_type_local = 'D'
  4.   and tc.ct_code = tcc.ct_code
  5.   and tc.et_code = tcc.et_code
  6. GROUP BY tc.ct_code, tc.et_code
  7. HAVING count(*) > 1


n°1246547
lapartdomb​re
Posté le 16-11-2005 à 09:50:26  profilanswer
 

Et apres je teste le nb d'élément renvoyé par ma requete. Si le nombre est nul c'est que ma regle de gestion est vérifié. C'est bien ca???

n°1246555
lapartdomb​re
Posté le 16-11-2005 à 10:03:25  profilanswer
 

Et pour faire qqch qui regarde si il existe au moins un enregistrement:
 
pour chaque duo ct_code et et_code de TMP_CHANTIER ayant le ct_type_local (TMP_CHANTIER) égale à 'M' ou 'V', le duo ct_code et et_code doit obligatoirement être référencé au moins une fois au sein de la table TMP_COMPOSITION_CHAINE

n°1246574
olivthill
Posté le 16-11-2005 à 10:23:04  profilanswer
 

En fait, je n'ai peut-être pas bien compris la question. Excuse-moi.
 
J'ai cru que la base avait été remplie avec des données quelconques, et qu'il fallait y faire un peu de ménage, et notamment repérer les doublons pour les enlever. Dnas ce cas, je fais passer ma requête qui me donne les doublons, les triplons, etc.
 
Mais, s'il faut juste éviter d'insérer des doublons dans une base propre, alors, ma requête est inutile. Il faut simplement faire une lecture dans la base prélablement à une insertion pour voir si un duo existe déjà. S'il existe, on ne fait pas d'insertion. Donc, ce serait juste un Select ordinaire à faire avant une insertion éventuelle.

n°1246708
rufo
Pas me confondre avec Lycos!
Posté le 16-11-2005 à 13:27:27  profilanswer
 

et distinct (ch1, ch2), ch3... from... ça marche pas?

n°1246741
lapartdomb​re
Posté le 16-11-2005 à 14:07:40  profilanswer
 

non ca ne marche pas

n°1247294
leflos5
On est ou on est pas :)
Posté le 17-11-2005 à 02:51:57  profilanswer
 

Pour moi un select distinct évite un doublon sur un champ et logiquement ça se comprend ;) Sauf si tu as un index sur plusieurs champs où là on pourrait comprendre que ça évince les doublons mais y'en aurait pas vu que index multiple pour valeur unique :D
 
En gros on sait toujours pas dans quelle condition tu veux faire ça et que c'est probablement un soucis de modélisation de ton truc dans ta base :)
 
Après reste les triggers si c'est plus difficile qu'un simple index unique sur plusieurs champs ;)


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

  [SQL] Disctinct sur plusieurs champs

 

Sujets relatifs
création de base SQL Serveur en visual basic.net[Oracle/SQL] recuperer l'heure GMT
[SQL Server] ntext -> <texte long>Le parametre numérique pour les champs de type numeric sert à quoi ?
Optimisation de requete PL/SQL[SQL Server] Comment voir les dernières requêtes ?
Donnée répétée à plusieurs reprises en la notant une seule foisSystème d'utilisateurs - XML ou SQL ?
compteur sur plusieurs fichier et plusieurs ongletsChamps de formulaire obligatoires : où est l'erreur ?
Plus de sujets relatifs à : [SQL] Disctinct sur plusieurs champs


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