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

Langage SQL Discussion :

Problème de requêtes imbriquées


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 121
    Points
    121
    Par défaut Problème de requêtes imbriquées
    Bonsoir à tous,

    De nouveau un problème de requête imbriqué :/
    J'ai deux tables une table "produit_certifie" et une table "LIEN_produit_suivi_etat"
    Un produit certifié peux avoir 1 à plusieurs états mais vu que c'est une modification de BDD les états ne possède pas spécialement de date donc il faut prendre par rapport au id pour les classer.
    Je souhaiterai récupérer le dernier état de chaque produit dans une requête.

    Voici le détail des table

    Table "produit certifié"
    #id_admin_produit_certifie
    ...
    ...

    Table "LIEN_produit_suivi_etat"
    # id_lien_produit_suivi_etat (AUTO INCREMENT)
    id_admin_produit_certifie
    id_annexe_produit_etat
    date_lien_produit_suivi_etat
    flag_ordre_lien_produit_suivi_etat

    Vous en remerciant par avance, car après avoir tout essayé je n'y parviens pas :/

    Nicolas

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par runner77 Voir le message
    Bonsoir à tous,

    De nouveau un problème de requête imbriqué :/
    J'ai deux tables une table "produit_certifie" et une table "LIEN_produit_suivi_etat"
    Un produit certifié peux avoir 1 à plusieurs états mais vu que c'est une modification de BDD les états ne possède pas spécialement de date donc il faut prendre par rapport au id pour les classer.
    Je souhaiterai récupérer le dernier état de chaque produit dans une requête.
    Vous n'avez aucune garantie que cette règle soit vraie. Même avec un auto incrément, la séquentialité stricte n'est pas garantie. On peut remettre à zéro ou toute autre valeur un auto incrément comme forcer des valeurs.

    Il vous faut impérativement une information temporelle pour faire cela.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Citation Envoyé par runner77 Voir le message
    après avoir tout essayé je n'y parviens pas
    Qu'as-tu essayé ?
    Qu'est-ce qui ne convenait pas dans le résultat ?
    - Un message d'erreur ? Lequel ?
    - Un résultat erronné ? Quel est le résultat obtenu ? le résultat attendu ? avec quelles données ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 195
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Vous n'avez aucune garantie que cette règle soit vraie. Même avec un auto incrément, la séquentialité stricte n'est pas garantie. On peut remettre à zéro ou toute autre valeur un auto incrément comme forcer des valeurs.

    Il vous faut impérativement une information temporelle pour faire cela.

    A +
    J’ai ajouté un flag ordre qui classe les états dans l’ordre croissant.

    Citation Envoyé par al1_24 Voir le message
    Qu'as-tu essayé ?
    Qu'est-ce qui ne convenait pas dans le résultat ?
    - Un message d'erreur ? Lequel ?
    - Un résultat erronné ? Quel est le résultat obtenu ? le résultat attendu ? avec quelles données ?
    J’ai effectué des jointures et dans les conditions j’ai tenté de faire une requête imbriquée mais je n’arrive pas à obtenir un résultat il m’indique que celle me retourne plus d’un résultat.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par runner77 Voir le message
    J’ai ajouté un flag ordre qui classe les états dans l’ordre croissant.
    Un flag ne peut prendre que deux valeurs : vrai (ou 1) et faux (ou 0). Pour effectuer un classement, c'est un peu maigre
    Comme l'a justement indiqué SQLPro, le seul moyen pour ranger des lignes selon un ordre temporel, c'est de disposer de colonne(s) d'horodatage



    Citation Envoyé par runner77 Voir le message
    J’ai effectué des jointures et dans les conditions j’ai tenté de faire une requête imbriquée mais je n’arrive pas à obtenir un résultat il m’indique que celle me retourne plus d’un résultat.
    En ce cas, comme le mentionne la charte de postage, il faut publier la ou les requêtes essayées et le ou les résultats obtenu(s) (message d'erreur le cas échéant, résultat attendu, résultat obtenu)
    EDIT : vous pouvez bien sur anonymiser les noms des tables ou des colonnes si vous craignez d'enfreindre des règles de confidentialité, en veillant toutefois à ne pas altérer la nature de la requête

  6. #6
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Bonjour,

    Si la zone qui te permet de déterminer le plus récent est aussi celle que tu veux afficher, tu peux écrire (flag_ordre_lien_produit_suivi_etat étant la zone de tri) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select produit_certifie.id_admin_produit_certifie, produit_certifie_max_etat.max_etat
    from produit_certifie
         inner join (select id_admin_produit_certifie, max(flag_ordre_lien_produit_suivi_etat) max_etat
                     from lien_produit_suivi_etat
                     group by id_admin_produit_certifie) produit_certifie_max_etat
         on produit_certifie.id_admin_produit_certifie = produit_certifie_max_etat.id_admin_produit_certifie
    Si la zone à afficher n'est pas celle qui permet de déterminer l'élément le plus récent, il faut filtrer la sous-requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select produit_certifie.id_admin_produit_certifie, produit_certifie_dernier_etat.la_zone_souhaitee
    from produit_certifie
         inner join (select id_admin_produit_certifie, la_zone_souhaitee
                     from lien_produit_suivi_etat
                     where flag_ordre_lien_produit_suivi_etat = (select max(lien2.flag_ordre_lien_produit_suivi_etat)
                                                                 from lien_produit_suivi_etat lien2
                                                                 where lien2.id_admin_produit_certifie = lien_produit_suivi_etat.id_admin_produit_certifie)
                     ) produit_certifie_dernier_etat
         on produit_certifie.id_admin_produit_certifie = produit_certifie_dernier_etat.id_admin_produit_certifie
    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

Discussions similaires

  1. Problème de requêtes imbriquées, possible sous Access ?
    Par PierrePM dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 14/11/2007, 19h45
  2. problème sur requête imbriqué
    Par Dam1en dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/10/2007, 16h55
  3. problème de requête imbriquées
    Par mehdiing dans le forum SQL
    Réponses: 11
    Dernier message: 30/07/2007, 08h51
  4. [MySQL] problème de requête imbriquée
    Par amarcil dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/04/2007, 15h04
  5. [MySQL] problème de requêtes imbriquées
    Par xave dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/01/2007, 13h30

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