IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Requete sans doublon [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Homme Profil pro
    ingénieur essais électronique
    Inscrit en
    Mai 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur essais électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 144
    Points : 75
    Points
    75
    Par défaut Requete sans doublon
    Bonjour,

    J'ai une base avec deux tables via odbc. Ces deux tables ont chacune un champ référence et un champ désignation. Cependant, le champ référence possède des doublons entre les deux tables et à l'intérieur d'une des deux tables, il y a aussi des doublons (issue des reférénces).

    Je voudrait réaliser une requete pour récupérer un tableau sans aucun doublon avec la référence unique et la désignation jointe (de l'une ou de l'autre table dans le cas des doublons).

    Ceci me permettra de réutilisée cette requete dans une liste modifiable.

    Merci

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Sylv20,

    Si j'ai bien compris, une des deux tables est sans doublon (1 ligne par référence) et l'autre contient des doublons (plusieurs lignes pour une même référence). C'est bien cela ?

  3. #3
    Membre régulier
    Homme Profil pro
    ingénieur essais électronique
    Inscrit en
    Mai 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur essais électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 144
    Points : 75
    Points
    75
    Par défaut
    Donc oui c'est à peut pret ca.

    On va les appeler table 1 et table 2

    table 1 (sans doublon du champs référence).
    champs :
    reference (clé primaire indéxé sans doublon)
    designation (non indéxé)

    table 2 (avec doublon sur le champs reférence)
    champs :
    ID (clé primaire indéxé sans doublon)
    reférence (non indéxé avec doublon) car il y a plusieurs issue pour uen reference
    designation (non indéxé)
    issues (non indéxé)

    Pour le moment, j'utilise la fonction UNION qui enlève tous les doublons de ma colonne reférence entre les deux tables. Mais je n'arrive pas a récupérer la colonne désignation de l'une ou de l'autre table.


    Donc j'aimerais dans une requete récupérer :

    le champs ref unique pour chaque reference (indéxé sans doublon)
    le champs désignation (non indéxé) de l'une ou de l'autre table

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Toutes les références de Table1 sont-elles, forcément, dans Table2 ?

  5. #5
    Membre régulier
    Homme Profil pro
    ingénieur essais électronique
    Inscrit en
    Mai 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur essais électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 144
    Points : 75
    Points
    75
    Par défaut
    Non.

    Certaines ref de table 1 ne sont dans table 2 et vice versa.

  6. #6
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    OK.

    Si une même référence est dans Table1 et dans Table2, la désignation est-elle, forcément, la même ?

  7. #7
    Membre régulier
    Homme Profil pro
    ingénieur essais électronique
    Inscrit en
    Mai 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur essais électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 144
    Points : 75
    Points
    75
    Par défaut
    Et bien non. En fait les deux tables sont renseignées par des services différents, la référence peut être identique avec des désignations différentes (ex : manocontact dans une table et manocontact 5bars dans une autre, l'idée reste la même).

    Je n'ai pas de contrainte à prendre telle ou telle désignation.

    Ps : dans une même table (table 2), il y a plusieurs fois la même référence (issue différente) et les désignations sont différentes aussi (cependant, c'est la même idée que precedemment au sujet des manocontacts).

    L'idée principale c'est la référence, je veux qua la liste déroulante laisse apparaitre la ref et la désignation (sur saisie de reference) mais le champs sera remplie uniquement par reference. La désignation sera juste un indice pour l'utilisateur (qu'il ne se trompe pas) lors de la sasie de la referenece.

    J'espere que je suis clair.

  8. #8
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Sylv20,

    Intéressant...

    Suggestion :
    - créer une requête R1 union de Table1 et Table2 ==> tous les enregistrements ;
    - créer une requête R2 qui analyse R1, groupée par "reference", avec Premier de "designation" ==> 1 ligne par référence avec la première désignation trouvée.

  9. #9
    Membre régulier
    Homme Profil pro
    ingénieur essais électronique
    Inscrit en
    Mai 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur essais électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 144
    Points : 75
    Points
    75
    Par défaut
    Ahhhhh, merci beaucoup.

    C'était simple en fait mais je ne connaissais pas cette histoire de regroupement.

    Donc au final, j'ai une requete sur chaque table qui recupere la ref et la designation ensuite une union entre les deux et pour finir une derniere requete qui regroupe les refs ensemble et prend la dernière designation (plutôt que la première comme dans ta réponse).

    Ma dernière requete (reference en regroupement et désignation la dernière) prend donc a chaque référence la dernière désignation disponible (en l'occurrence celle de la table 2 car j'ai fait table 1 union table 2) ?

    Le regroupement supprime les doublons c'est ca ???

    Question subsidière :

    Si tu n'a pas de réponse c'est pas grave, le principal est fait.

    Dans les tables 1 et 2 :

    une référence dans la table 1 possède une désignation.
    la même référence dans la table 2 ne possède pas de désignation.
    (et bien sure vice versa)

    Dans ma requête finale, il me prend la désignation de la table 2 (celle ou il n'y a pas de désignation). Du coup la désignation est vide alors qu'elle existe dans la table 1.
    Je voudrais si possible la désignation lorsqu'elle est présente dans l'une ou l'autre tables sinon ca reste vide si ni dans l'une ni dans l'autre la désignation n'est présente.

  10. #10
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Citation Envoyé par Sylv20
    .../... prend la dernière designation (plutôt que la première comme dans ta réponse).
    ==> peu importe, en fait, puisqu'il faut que tu en prennes une.


    Citation Envoyé par Sylv20
    Le regroupement supprime les doublons c'est ca ???
    ==> oui, entre autre (∑, dans l'assistant) : il permet, également, de bénéficier de fonctions propres au groupe (min(), max(), first(), etc...)


    Citation Envoyé par Sylv20
    Je voudrais si possible la désignation lorsqu'elle est présente dans l'une ou l'autre tables sinon ca reste vide si ni dans l'une ni dans l'autre la désignation n'est présente.
    ==> il suffit de trier ta requête en ordre décroissant, et de prendre la première désignation (ou en ordre croissant, et de prendre la dernière).

  11. #11
    Membre régulier
    Homme Profil pro
    ingénieur essais électronique
    Inscrit en
    Mai 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur essais électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 144
    Points : 75
    Points
    75
    Par défaut
    Bon j'ai essayé plein de formule et d'ordre différent mais ca ne marche pas.

    Voila en détail :

    requete sur la table 1 (ess1_3) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT dbo_Ref.Ref, dbo_Ref.Designation
    FROM dbo_Ref;
    cette requete ne me sélectionne que les deux premières colonnes (référence + désignation) de ma table d'origine qui en compte 10.

    requete sur la table 2 (ess2_3):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT dbo_Art_emcl_DBF.NOMART, dbo_Art_emcl_DBF.DESCRIPT
    FROM dbo_Art_emcl_DBF;
    cette requete ne me sélectionne que les deux colonnes qui m'interesse (référence + désignation) de ma table d'origine qui en compte 9.


    Ensuite, je fais une union qui trie par désignation en ordre croissant (req1_3):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * from [ess1_3]
    UNION ALL SELECT * from [ess2_3]
    ORDER BY Designation;
    Cette requete me donne l'union de tous les enregistrements et ceux ci trié par leur désignation (ex : une reference sans désignation est en début de requete et la même référence avec une désignation est en fin de requete).

    Ensuite je fais un regroupement sur la référence et prendre la dernière désignation (car ordre croissant dans ma requete union) (req1_3_fin):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT req1_3.Ref, Last(req1_3.Designation) AS DernierDeDesignation
    FROM req1_3
    GROUP BY req1_3.Ref;
    Et il me sort la bonne référence mais avec la première désignation (soit une case vide).

    PS : des fois la table 1 a la désignation et la table 2 n'a pas la désignation mais des fois c'est l'inverse, c'est la table 1 qui n'a pas la désignation et c'est la table 2 qui a la désignation.
    Je voudrais qu'il me sorte toujours celle qui a la désignation. Ou s'il n'y a pas de désignation dans ausune des deux tables et bien le champs restera vide.

  12. #12
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Supprimes "ALL" de "UNION ALL".
    Et utilises les balises "codes" ==> #, en haut.

  13. #13
    Membre régulier
    Homme Profil pro
    ingénieur essais électronique
    Inscrit en
    Mai 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur essais électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 144
    Points : 75
    Points
    75
    Par défaut
    Merci pour tout. Ca fonctionne parfaitement. Une fois dans la liste modifiable ca fait bien pro.

    Finalement à un mot près le résultat est complètement différent.

    Encore merci.

  14. #14
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Citation Envoyé par Sylv20
    Finalement à un mot près le résultat est complètement différent.
    ==> c'est souvent le cas... et pas seulement en informatique...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete SELECT SQL sans doublon
    Par arnaud_76 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 17/11/2014, 08h01
  2. [AC-2003] requete sans doublons
    Par facteur dans le forum Requêtes et SQL.
    Réponses: 18
    Dernier message: 22/05/2012, 11h16
  3. Requete affichage compétence sans doublon
    Par coyote90 dans le forum Requêtes
    Réponses: 7
    Dernier message: 19/11/2009, 12h43
  4. requete selection sans doublons
    Par fred75 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 20/03/2008, 20h59
  5. Requête sans doublons
    Par adurand dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 07/12/2006, 23h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo