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 :

[SELECT] : problème de doublons


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut [SELECT] : problème de doublons
    Bonjour,

    j'ai créé une requête dans laquelle je voudrais ne récupérer que les valeurs disctinctes. J'ai donc utilisé la clause DISTINCT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DISTINCT(a.valeurCherchee)
    Le résultat de ma requête me donne quand même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    valeurCherchee
    571
    571
    Quelqu'un voit-il d'où peut provenir mon erreur ?

    Je précise tout de même que ma requête est de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT distinct (a.valeurCherchee)
    FROM Application a, Application b
    Where ListeDesClauses
    La conséquence directe est que mes deux résultats proviennent bien de deux enregistrement différent. Mais comme je veux les valeurs distinctes uniquement de la colonne valeurCherchee, je reste avec mon problème.

    J'espère que la clarté de mes explications sera suffisante...
    abertaud
    ---------

    - pas de réponse technique en PV, utilisez les forums
    - si vous trouvez seuls la solution, n'abandonnez pas votre post, mettez-le à jour pour les autres
    - le tag est parfois en voie d'extinction, participez à sa survie

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 145
    Points
    145
    Par défaut
    Vu que tu ne selectionnes rien dans ta table Application b, je ne suis pas sur qu'elle soit nécessaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT (a.valeurCherchee)
    FROM Application a
    WHERE ListeDesClauses

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Essaye avec : DISTINCTROW à la place de DISTINCT.

    Starec

  4. #4
    Membre éclairé Avatar de LeXo
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 147
    Points : 868
    Points
    868
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where listeDesClauses ??
    where koi ? sur table b ?
    Plzzz pas de questions par MP.

  5. #5
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    ListeClauses sont effectivement une liste de clauses à satisfaire sur a ET sur b (des égalités de champs par ci, des différences par là, ou encore des valeurs non nulles).

    Même si je ne sélectionne pas de champ dans ma table b(proposition de Keul85), elle est indispensable pour la requête car les clauses l'utilisent.

    Enfin, pour ce qui est du DISTINCTROW, il me donne le même résultat.

    En fait, si je prends comme résultat de requête ce qui m'intéresse + l'identifiant du champ, je vois qu'il est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    id             champCherche
    u82xTx)V4Pe1      571
    m00lxfSR4nd0      571
    J'ai donc bien une récupération de tuples distincts. Or je voudrais que ce soit les champCherchés qui soient distincts...
    abertaud
    ---------

    - pas de réponse technique en PV, utilisez les forums
    - si vous trouvez seuls la solution, n'abandonnez pas votre post, mettez-le à jour pour les autres
    - le tag est parfois en voie d'extinction, participez à sa survie

  6. #6
    Membre éclairé Avatar de LeXo
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 147
    Points : 868
    Points
    868
    Par défaut
    les clauses ??
    réduit ta requete sa plus simple expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct a.tonChamp from a;
    Plzzz pas de questions par MP.

  7. #7
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Citation Envoyé par LeXo
    les clauses ??
    réduit ta requete sa plus simple expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct a.tonChamp from a;
    Réduite comme tu le proposes, le résultat est satisfaisant.

    Les clauses dans celle que je veux mettre en place sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT(a.numéro_application)
    FROM Application AS a, Application AS b
    WHERE a.referentiel=b.referentiel 
    And a.numéro_application=b.numéro_application 
    And a.numéro_application<>'' 
    And a.Identifiant_objet<>b.Identifiant_objet;
    abertaud
    ---------

    - pas de réponse technique en PV, utilisez les forums
    - si vous trouvez seuls la solution, n'abandonnez pas votre post, mettez-le à jour pour les autres
    - le tag est parfois en voie d'extinction, participez à sa survie

  8. #8
    Membre éclairé Avatar de LeXo
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 147
    Points : 868
    Points
    868
    Par défaut
    et je suppose que tu n'es pas d'accord avec le résultat que te retourne ta requete....parce que tu as verifier

    le référentiel c un integer ?
    <> ' ' ou IS NOT NULL ?
    Plzzz pas de questions par MP.

  9. #9
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Citation Envoyé par LeXo
    et je suppose que tu n'es pas d'accord avec le résultat que te retourne ta requete....parce que tu as verifier

    le référentiel c un integer ?
    <> ' ' ou IS NOT NULL ?
    Je ne suis pas d'accord parce qu'il me renvoie deux éléments valant "571", ce qui reste étrange étant donné que je mets une clause DISTINCT...

    le référentiel n'est pas un integer non. Tous mes champs sont de type Memo, car ils sont créés par une importation automatisé de documents XML, ce qui n'empeche pas d'obtenir le bon résultat si je fais la requête simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT(a.numéro_application) From Application AS a;
    Pour ce qui est du champ numéro_application, c'est bien <> '' qu'il me faut et non pas "IS NOT NULL"
    abertaud
    ---------

    - pas de réponse technique en PV, utilisez les forums
    - si vous trouvez seuls la solution, n'abandonnez pas votre post, mettez-le à jour pour les autres
    - le tag est parfois en voie d'extinction, participez à sa survie

  10. #10
    Membre éprouvé Avatar de jean-paul lepetit
    Inscrit en
    Février 2005
    Messages
    842
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Février 2005
    Messages : 842
    Points : 919
    Points
    919
    Par défaut
    Salut,
    Je comprends pas trop ta requête, tu utilises 2 fois la même table ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT(a.numéro_application)
    FROM Application AS a, Application AS b
    WHERE a.referentiel=b.referentiel 
    And a.numéro_application=b.numéro_application 
    And a.numéro_application<>'' 
    And a.Identifiant_objet<>b.Identifiant_objet;
    Ils ne savaient pas que c'était impossible, alors il le réalisèrent (Mark Twain)

  11. #11
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Citation Envoyé par jean-paul lepetit
    Salut,
    Je comprends pas trop ta requête, tu utilises 2 fois la même table ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT(a.numéro_application)
    FROM Application AS a, Application AS b
    WHERE a.referentiel=b.referentiel 
    And a.numéro_application=b.numéro_application 
    And a.numéro_application<>'' 
    And a.Identifiant_objet<>b.Identifiant_objet;
    J'utilise deux fois la même table car le but de ma requête est de :
    déterminer s'il existe deux applications différentes (ayant un identifiant "Identifiant_objet" différent), qui proviennent du même référentiel et qui possèdent le même numéro d'application (autre qu'une chaine vide).
    Lorsqu'il en existe, je veux les lister, ou plutot lister les numéro d'application associés.
    abertaud
    ---------

    - pas de réponse technique en PV, utilisez les forums
    - si vous trouvez seuls la solution, n'abandonnez pas votre post, mettez-le à jour pour les autres
    - le tag est parfois en voie d'extinction, participez à sa survie

  12. #12
    Membre éprouvé Avatar de jean-paul lepetit
    Inscrit en
    Février 2005
    Messages
    842
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Février 2005
    Messages : 842
    Points : 919
    Points
    919
    Par défaut
    Tu as essayé avec l'assistant requête trouver les doublons, car il me semble que c'est ce que tu cherches, non?
    Ils ne savaient pas que c'était impossible, alors il le réalisèrent (Mark Twain)

  13. #13
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Je n'ai pas essayé non car j'attaque ma base par VBScript.

    Toujours est-il que ce ne sont pas les vrais doublons que je cherche, mais les doublons dans certains cas Précis.

    Plus d'explications
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table Application(Referentiel, identifiant_objet, numéro_application, etc.)
    Cette table contient des infos sur des applications. Ces informations proviennent de différents référentiels qui les traitent comme des objet et les identifient tout seul, en fabriquant un identifiant_objet.

    Du coup, une application provenant de 2 référentiels différents sera identifiée par 2 objets distinct, d'où l'apparition de numéro_application qui permet de numéroter toute nos applications, et de dire parfois : c'est la même application...
    abertaud
    ---------

    - pas de réponse technique en PV, utilisez les forums
    - si vous trouvez seuls la solution, n'abandonnez pas votre post, mettez-le à jour pour les autres
    - le tag est parfois en voie d'extinction, participez à sa survie

  14. #14
    Membre éclairé Avatar de LeXo
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 147
    Points : 868
    Points
    868
    Par défaut
    si c pas un integer t'as essayé plutot like

    et IS NOT NULL si tes champs vide sont en faites null
    Plzzz pas de questions par MP.

  15. #15
    Membre éprouvé Avatar de jean-paul lepetit
    Inscrit en
    Février 2005
    Messages
    842
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Février 2005
    Messages : 842
    Points : 919
    Points
    919
    Par défaut
    Essayes cet assistant car il te permet de choisir tes champs qui sont en doublons (1,2,....) et après, tu peux récupérer le code SQL de ta requête
    Ils ne savaient pas que c'était impossible, alors il le réalisèrent (Mark Twain)

  16. #16
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Citation Envoyé par LeXo
    si c pas un integer t'as essayé plutot like

    et IS NOT NULL si tes champs vide sont en faites null
    Ils ne sont pas nulls mais vides...
    Like n'est pas adapté puisque je veux que mon champ ne soit pas vide (d'où le qui fonctionne bien dans tout un tas d'autre requête.

    Le problème que je rencontre se situe au niveau du DISTINCT, probablement parce que j'utilise deux fois la table Application dans ma requête.
    abertaud
    ---------

    - pas de réponse technique en PV, utilisez les forums
    - si vous trouvez seuls la solution, n'abandonnez pas votre post, mettez-le à jour pour les autres
    - le tag est parfois en voie d'extinction, participez à sa survie

  17. #17
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Citation Envoyé par jean-paul lepetit
    Essayes cet assistant car il te permet de choisir tes champs qui sont en doublons (1,2,....) et après, tu peux récupérer le code SQL de ta requête
    Ca ne me parait pas trop mal comme approche du problème.

    Comment utiliser cet assistant ? (désolé, Access et moi, c'est pas encore trop ca)
    abertaud
    ---------

    - pas de réponse technique en PV, utilisez les forums
    - si vous trouvez seuls la solution, n'abandonnez pas votre post, mettez-le à jour pour les autres
    - le tag est parfois en voie d'extinction, participez à sa survie

  18. #18
    Membre éprouvé Avatar de jean-paul lepetit
    Inscrit en
    Février 2005
    Messages
    842
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Février 2005
    Messages : 842
    Points : 919
    Points
    919
    Par défaut
    Onglet requête /Bouton nouveau /Assistant Requête trouver les doublons
    Ils ne savaient pas que c'était impossible, alors il le réalisèrent (Mark Twain)

  19. #19
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Citation Envoyé par jean-paul lepetit
    Essayes cet assistant car il te permet de choisir tes champs qui sont en doublons (1,2,....) et après, tu peux récupérer le code SQL de ta requête
    Excellente information : je ne peux même pas passer l'étape 1 de l'assistant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vous devez sélectionner une table ou requête contenant au moins un champ de le type est différent de Memo ou Ole.
    voila qui pourrait m'aider. Ce qui est bizarre, c'est que la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT numéro_application From Application
    avait pourtant fonctionné, alors que c'est également un champ de type Mémo. Je vais méditer la dessus
    abertaud
    ---------

    - pas de réponse technique en PV, utilisez les forums
    - si vous trouvez seuls la solution, n'abandonnez pas votre post, mettez-le à jour pour les autres
    - le tag est parfois en voie d'extinction, participez à sa survie

  20. #20
    Membre éprouvé Avatar de jean-paul lepetit
    Inscrit en
    Février 2005
    Messages
    842
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Février 2005
    Messages : 842
    Points : 919
    Points
    919
    Par défaut
    Voilà un exemple de requête trouver les doublons (avec des noms de champs à moi) pour te donner une idée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Apprenant.Nom_Apprenant, Apprenant.Prenom_Apprenant, Apprenant.Civilité, Apprenant.N°_Secu, Apprenant.Code_Chef_Service, Apprenant.Statut, Apprenant.Identifiant
    FROM Apprenant
    WHERE (((Apprenant.Nom_Apprenant) In (SELECT [Nom_Apprenant] FROM [Apprenant] As Tmp GROUP BY [Nom_Apprenant],[Prenom_Apprenant] HAVING Count(*)>1  And [Prenom_Apprenant] = [Apprenant].[Prenom_Apprenant])))
    ORDER BY Apprenant.Nom_Apprenant, Apprenant.Prenom_Apprenant;
    Ils ne savaient pas que c'était impossible, alors il le réalisèrent (Mark Twain)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] Problème de doublons en créant un form select en php/mysql
    Par onoff_5 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 17/09/2012, 11h25
  2. [XL-2000] Problème combobox doublons et selection multiple
    Par Hellhand dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/08/2012, 09h54
  3. Requête SELECT problème dans les résultats trouvés ...
    Par snoopy69 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/10/2005, 12h46
  4. [access] Problème de doublons
    Par nesbla dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/05/2005, 09h25
  5. [struts][JSP][select] problème avec le select
    Par redge_touch dans le forum Struts 1
    Réponses: 4
    Dernier message: 14/01/2004, 10h05

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