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 :

Problème d'extraction de données


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Mai 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant en informatique

    Informations forums :
    Inscription : Mai 2018
    Messages : 31
    Points : 34
    Points
    34
    Par défaut Problème d'extraction de données
    Bonjour !

    Voici la situation dans laquelle je me trouve :
    J'ai une table Ouvertures_dossiers_Avril_2018 (que je vais appeler Ouvertures pour des raisons pratiques), et une table Dossier_ouvert_montantenc (que je vais appeler Dossier ici), qui contiennent toutes un bon nombre de champs que je ne vais donc pas détailler puisque d'une part ils ne sont pas communs aux 2 tables, et d'autre part parce que seulement 2 d'entre eux m'intéressent (qui sont les 2 seuls champs que j'ai en commun dans mes 2 tables) : l'Id_Partenaire et le Nom_Partenaire.

    Ce que je voudrais faire, c'est extraire toutes les lignes de la table Ouvertures où les personnes ont un Id_Partenaire qui ne se trouve pas dans la table Dossier (en clair, je veux juste l'Id et le nom des personnes dont l'Id se trouve uniquement dans la table Ouverture (/!\ je ne veux pas différencier par rapport au Nom_Partenaire, parce qu'il y a des homonymes et que je veux les faire afficher s'ils n'ont pas le même Id_Partenaire)).

    Le problème auquel je suis confronté est que je ne peux lier mes tables que par l'Id_Partenaire (puisque c'est la seule information que tout le monde a en commun, vu qu'il y a des homonymes), mais que je dois également me servir de cet Id_Partenaire pour déterminer si je vais récupérer ou non la ligne pour l'afficher (encore une fois à cause des homonymes).

    Actuellement, mon code ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT Ouvertures_dossiers_Avril_2018.Id_Partenaire, Ouvertures_dossiers_Avril_2018.Nom_Partenaire
    FROM Ouvertures_dossiers_Avril_2018 LEFT JOIN Dossier_ouvert_montantenc ON Ouvertures_dossiers_Avril_2018.Id_Partenaire = Dossier_ouvert_montantenc.Id_Partenaire
    WHERE NOT EXISTS(SELECT Ouvertures_dossiers_Avril_2018.Id_Partenaire 
    FROM Ouvertures_dossiers_Avril_2018 
    WHERE Ouvertures_dossiers_Avril_2018.Id_Partenaire = Dossier_ouvert_montantenc.Id_Partenaire)
    Cette requête me renvoie l'intégralité de la table Ouvertures, et je n'arrive pas à obtenir ce que je veux.

    J'espère que j'ai été le plus clair possible !
    Note : Les noms de tables ainsi que les champs me sont imposés.

    Je vous souhaite un bon après-midi, et remercie par avance ceux qui me répondront.

    EDIT : Je suis nouveau sur le forum, et après avoir lu les règles de ce dernier, je précise que :
    - En m'aidant de beaucoup de discussions sur ce forum et ailleurs, passant du français à l'anglais, j'ai essayé un grand nombre de solutions plus ou moins diverses, principalement en ce qui concerne le NOT EXISTS (vous voyez ici une version parmi la bonne douzaine que j'ai produit, sans plus d'effets que les autres).
    - Je suppute que mon problème vient du fait que j'utilise l'Id_Partenaire ET pour lier les tables ET pour faire ma distinction, mais je n'en suis pas sûr et puisque je ne peux ajouter ni modifier de champs dans mes tables (ils me sont imposés, je le rappelle), je ne sais vraiment pas comment m'y prendre, et je n'ai plus d'idées à tester.

  2. #2
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    Et ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Ouvertures_dossiers_Avril_2018.Id_Partenaire, Ouvertures_dossiers_Avril_2018.Nom_Partenaire
    FROM Ouvertures_dossiers_Avril_2018
    WHERE not in (SELECT Dossier_ouvert_montantenc.Id_Partenaire FROM Dossier_ouvert_montantenc;)
    Not in à placer dans le critère du champ Ouvertures_dossiers_Avril_2018.Id_Partenaire
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Mai 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant en informatique

    Informations forums :
    Inscription : Mai 2018
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    Salut, et tout d'abord merci de ta réponse !

    Alors je ne sais pas si je n'applique pas ce que tu m'as donné comme il le faut, mais quand j'insèrele NOT IN dans le critère du champ Ouvertures_dossiers_Avril_2018.Id_Partenaire, lorsque j'exécute la requête j'ai la fameuse boîte de dialogue (avec laquelle je me suis déjà battu plusieurs fois !) "Entrer une valeur de paramètre" qui s'affiche.
    Lorsque je rentre une valeur réalise, la requête me renvoi un tableau vide

  4. #4
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Citation Envoyé par BorisW Voir le message
    Salut, et tout d'abord merci de ta réponse !
    Alors je ne sais pas si je n'applique pas ce que tu m'as donné comme il le faut, mais quand j'insèrele NOT IN dans le critère du champ Ouvertures_dossiers_Avril_2018.Id_Partenaire, lorsque j'exécute la requête j'ai la fameuse boîte de dialogue (avec laquelle je me suis déjà battu plusieurs fois !) "Entrer une valeur de paramètre" qui s'affiche.
    Lorsque je rentre une valeur réalise, la requête me renvoi un tableau vide
    Oups ! essayez ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Ouvertures_dossiers_Avril_2018.Id_Partenaire, Ouvertures_dossiers_Avril_2018.Nom_Partenaire
    FROM Ouvertures_dossiers_Avril_2018
    WHERE ((Ouvertures_dossiers_Avril_2018.Id_Partenaire) Not In (SELECT Dossier_ouvert_montantenc.Id_Partenaire FROM Dossier_ouvert_montantenc;))
    Pourtant ça devrait donner un résultat.
    Nous sommes bien d'accord que vous voulez extraire de la tbl_Ouvertures_dossiers_Avril_2018 id et nom qui n'ont aucune correspondance dans la tbl Dossier_ouvert_montantenc ?
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 619
    Points : 56 854
    Points
    56 854
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    C'est une requête de non-correspondance, il y a un assistant pour construire ce genre de requêtes dans Access.

    Le SQL généré par l'assistant sera du style :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM Ouverture O LEFT JOIN DOSSIER D
    ON O.Id_partenaire=D.Id_partenaire
    WHERE D.Id_Partenaire IS NULL

    Le NOT EXISTS est possible, mais il me semble qu'il rame pas mal sous Access...

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Mai 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant en informatique

    Informations forums :
    Inscription : Mai 2018
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    Tout d'abord, merci pour vous réponses !

    Citation Envoyé par hyperion13 Voir le message
    Oups ! essayez ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Ouvertures_dossiers_Avril_2018.Id_Partenaire, Ouvertures_dossiers_Avril_2018.Nom_Partenaire
    FROM Ouvertures_dossiers_Avril_2018
    WHERE ((Ouvertures_dossiers_Avril_2018.Id_Partenaire) Not In (SELECT Dossier_ouvert_montantenc.Id_Partenaire FROM Dossier_ouvert_montantenc;))
    Pourtant ça devrait donner un résultat.
    Nous sommes bien d'accord que vous voulez extraire de la tbl_Ouvertures_dossiers_Avril_2018 id et nom qui n'ont aucune correspondance dans la tbl Dossier_ouvert_montantenc ?
    Cela me donne la même chose, je pense que le problème vient d'ailleurs...

    C'est exactement ça : J'ai des personnes qui ont un id un nom et d'autres champs (qui ne sont pas importants pour ce que je veux faire) dans les 2 tables. Certains sont présents dans Ouvertures, d'autre sont présent dans les 2, et d'autres encore sont présents dans Dossier. Je souhaite ne récupérer l'Id et le Nom des personnes uniquement présentes dans Ouvertures. Or malgré tous mes efforts, à chaque fois, au mieux je ne réussi qu'à obtenir l'Id et le nom des personnes uniquement présentes dans Dossier. Je n'arrive pas à faire de même pour Ouvertures, ça paraît certainement idiot mais je bloque là-dessus...

    Bonjour,

    C'est une requête de non-correspondance, il y a un assistant pour construire ce genre de requêtes dans Access.

    Le SQL généré par l'assistant sera du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM Ouverture O LEFT JOIN DOSSIER D
    ON O.Id_partenaire=D.Id_partenaire
    WHERE D.Id_Partenaire IS NULL
    Le NOT EXISTS est possible, mais il me semble qu'il rame pas mal sous Access...
    Bonjour ! Merci pour cette réponse, c'est vrai que je vois bien comment il est possible d'en faire une, mais je n'avais pas du tout exploré cette solution.
    Je ne peux essayer pour l'instant, mais dès que ce sera le cas je vous donnerai un retour.
    Et oui au passage, le NOT EXISTS met au moins à chaque fois 30 secondes à s'exécuter, alors que mes tables ne sont pas immenses ... Autant dire que pour voir au final apparaître le magnifique tableau vide, c'est frustrant !

    Je vous remercie tous les 2 une fois encore !!
    Je vous tiens au courant au plus vite.

    Cordialement,
    BorisW

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Mai 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant en informatique

    Informations forums :
    Inscription : Mai 2018
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    Et bien je vous remercie énormément !
    La requête de non-correspondance avec l'assistant a l'air de très bien fonctionner.
    Je fais les dernières vérifications, et si tout est bon je mettrai ce sujet comme résolu.
    Quoi qu'il en soit, merci pour votre aide à tous les deux !!

    Cordialement,
    BorisW

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 30/12/2011, 11h08
  2. Je n'arrive pas à récuperer les données d'un div
    Par lonyc dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/12/2008, 08h53
  3. [C#] Je n'arrive pas à remonter les données
    Par Le Basque dans le forum Windows Forms
    Réponses: 14
    Dernier message: 17/01/2005, 19h40

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