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 :

[Débutant] Simplification d'une requète [AC-2016]


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [Débutant] Simplification d'une requète
    Bonjour,
    Bon alors tout d'abord j’insiste sur le fait que la dernière fois que j'ai touché à Access c'était il y a plus ou moins 15 ans et de façon basique alors attention âme sensibles s'abstenir !

    J'ai une table comportant les champs ci dessous (il s'agit de montures):


    Le but de ma requête est le suivant :
    Access me demande quel est le nom de ma monture?
    Il me trouve les montures de sexe opposés
    >0 Reproduction
    Sans âme sœur
    Avec l'état Fécond
    Dont aucun ancêtre dans l'arbre généalogique n'est commun sur mes 4 générations

    J'ai globalement réussi à me démerder cependant je rencontre des difficultés principalement en ce qui concerne la non consanguinité :

    J'ai créé une requête que j'ai appelé "sous requête" et qui me demande quelle monture je veux afficher.

    A Partir de là dans une seconde requête j'ai tapé les critères suivants :
    Sexe : <>(SELECT[Sexe]FROM[Sous Requete]) (pour avoir les montures de sexe opposé à la monture demandé) ;
    Reproduction : >0 (pour avoir les reproductions > a 0)
    Ame sœur : Est null (pour avoir des montures qui n'ont pas d'ame sœur)
    Etat : "Fécond" (pour avoir les montures qui sont dans l'état Fécond)
    Père : (attention les yeux)

    <>(SELECT [Père] FROM [Sous Requete]) Et <>(SELECT [Grand père (père)] FROM [Sous Requete]) Et <>(SELECT [Grand père (mère)] FROM [Sous Requete]) Et <>(SELECT [Arrière grand père (Grand père (père))] FROM [Sous Requete]) Et <>(SELECT [Arrière grand père (Grand mère(père))] FROM [Sous Requete]) Et <>(SELECT [Arrière grand père (Grand père (mère))] FROM [Sous Requete]) Et <>(SELECT [Arrière grand père (Grand mère(mère))] FROM [Sous Requete]).

    (J'ai recherché les redondances dans les noms masculins de l'arbre)

    Mère :

    <>(SELECT [Mère] FROM [Sous Requete]) Et <>(SELECT [Grand mère (père)] FROM [Sous Requete]) Et <>(SELECT [Grand mère (mère)] FROM [Sous Requete]) Et <>(SELECT [Arrière grand mère (Grand père(père))] FROM [Sous Requete]) Et <>(SELECT [Arrière grand mère (Grand mère (mère))] FROM [Sous Requete]) Et <>(SELECT [Arrière grand mère (Grand père(mère))] FROM [Sous Requete]) Et <>(SELECT [Arrière grand mère (Grand mère (père))] FROM [Sous Requete])
    (J'ai recherché les redondances dans les noms féminins de l'arbre)
    (Je vous épargne la suite c'est la même chose)

    Du coup j'ai eu le problème suivant :

    J'ai des montures qui n'ont pas de famille, elles ont dont des champs vides. Donc vis à vis de ma formule bah ça pose probleme car du coup deux montures qui n'ont pas de père sont considéré comme consanguine.

    Ensuite du coup je me suis dit bah facile suffit de mettre Ou Est null à la fin mais je ne saurais dire pourquoi access n'a vraiment pas aimé et ma dupliquer mes critères sur les lignes d'en dessous.

    Je ne vais pas vous faire la liste des nombreux problèmes que j'ai rencontré mais au final actuellement access me dit que ma requête est trop complexe et qu'il me faut la simplifier. Et je suis totalement d'accord je suis une quiche c'est moche ce que j'ai fait mais j'ai fait comme j'ai pu et il y a forcément moyen de faire la même chose en 2/3 lignes et c'est pour ça que je me tourne vers vous.

    Merci d'avance et encore une fois veuillez pardonner mon ignorance et mon incompétence. J'ai essayé de vous donner le plus d'information et de détail possible, en espérant qu'il ne manque rien ou qu'il n'y en a pas trop.

  2. #2
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'ai fais quelques recherches, je me suis penché un peu sur le SQL et sur le fonctionnement de select, from etc et j'en suis arrivé a ça :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Muldos.Nom, Muldos.Sexe, Muldos.Couleur, Muldos.Reproduction, Muldos.[Capacité 1], Muldos.[Capacité 2], Muldos.[Ame Soeur], Muldos.Etat, Muldos.Père, Muldos.Mère, Muldos.[Grand père (père)], Muldos.[Grand mère (père)], Muldos.[Grand père (mère)], Muldos.[Grand mère (mère)], Muldos.[Arrière grand père (Grand père (père))], Muldos.[Arrière grand mère (Grand père(père))], Muldos.[Arrière grand père (Grand mère(père))], Muldos.[Arrière grand mère (Grand mère (père))], Muldos.[Arrière grand père (Grand père (mère))], Muldos.[Arrière grand mère (Grand père(mère))], Muldos.[Arrière grand père (Grand mère(mère))], Muldos.[Arrière grand mère (Grand mère (mère))]
    FROM Muldos
    WHERE (((Muldos.Sexe)<>(SELECT[Sexe]FROM[Sous Requete])) AND ((Muldos.Reproduction)>0) AND ((Muldos.[Ame Soeur]) Is Null) AND ((Muldos.Etat)="Fécond") AND ((Muldos.[Père])<>(SELECT [Père], [Grand père (père)], [Grand père (mère)], [Arrière grand père (Grand père (père))], [Arrière grand père (Grand mère(père))], [Arrière grand père (Grand père (mère))], [Arrière grand père (Grand mère(mère))] FROM [Sous Requete]));
    Mais un message d'erreur me disant d'utiliser le mot exists me stoppe dans mon avancé.
    En plus je ne suis pas persuadé que le fait d’alléger de cette manière la ma requête soit suffisant pour qu'Access l'accepte une foi fini pour tous les champs vu que je compte la répéter pour chaque champs de l'arbre généalogique.

  3. #3
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    Salut,

    Ton problème est soit que ta sous requête peut donner plusieurs résultats soit tu n'as pas fait de regroupement dans ta sous requête.

    Pourrais tu mettre en pièce jointe ta base ?

  4. #4
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse @martii843, j'ai depuis résolu ce probleme en contournant la limitation d'access avec deux requêtes plus simples et en liant le tout avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM 
    WHERE IN ;
    Merci quand même pour la réponse, je met la balise résolu au sujet.

    @martii843 : Cependant si tu veux toujours via message privé avoir une copie de ma base de donnée pour m'aider à l'améliorer ou pointer du doigt certaines erreurs que j'aurais pu faire c'est avec plaisir que je te fournirais ça.

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

Discussions similaires

  1. [débutant] Choix d'une requêtes
    Par LhIaScZkTer dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/09/2006, 18h01
  2. [Débutant] Paramétrage d'une requête SQL
    Par sunchai dans le forum Oracle
    Réponses: 2
    Dernier message: 31/07/2006, 12h48
  3. [WD9] [Débutant] Paramètre d'une requête
    Par Harry dans le forum WinDev
    Réponses: 13
    Dernier message: 11/07/2006, 11h13
  4. Réponses: 2
    Dernier message: 03/05/2006, 18h00
  5. Simplification d'une requête UNION
    Par eautret dans le forum Langage SQL
    Réponses: 6
    Dernier message: 18/01/2005, 15h51

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