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 :

Récupérer un attribut d'une sous requête


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 41
    Par défaut Récupérer un attribut d'une sous requête
    Bonjour, je n'arrive pas à récupérer les valeurs d'un attribut présent dans une sous-requête dans la rêquete qui l'appelle.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT personne, reference, derniereRef
    FROM ListeReference
    WHERE reference !=
        (SELECT MAX(reference) AS derniereRef
        FROM Fiches
        WHERE Fiches.categorie=ListeReference.categorie);
    Cette requete liste les personnes n'ayant pas la derniere reference d'une categorie et affiche leur reference (non màj) ainsi que la derniere reference (celle que la personne devrait avoir) pour chaque categories

    PS: si en même temps quelqu'un pouvait m'éxpliquer pourquoi on ne peut pas mettre un ORDER BY dans un sous-requête, ça m'interesse

    Merci à vous

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 138
    Par défaut
    Il faut passer par une table dérivée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT    lstref.personne
        ,     lstref.reference
        ,    derref.derniereRef
    FROM     ListeReference    AS lstref
        INNER JOIN
            (    SELECT    Fiches.categorie
                    ,    MAX(reference) AS derniereRef
                FROM    Fiches
                GROUP BY Fiches.categorie
            )    AS    derref
            ON    derref.categorie = lstref.categorie
            AND    lstref.reference <> derref.derniereRef
    ;
    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.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 41
    Par défaut
    Oua je pensais pas qu'il fallait faire une requete si compliqué pour un tel resultat. Je pensais juste me tromper dans la syntaxe.
    Merci à vous

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 41
    Par défaut
    Désolé mais en fait j'ai un peu triché : j'ai voulu simplifier ma requete pour ne faire apparaitre que ce probleme, et maintenant je n'arrive pas à adapter votre solution à ma requete
    Pourriez vous jetez un oeil à celle la vraie requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT id_personne, reference, derniereRef
    FROM f_listefonction
    WHERE reference !=
        (SELECT MAX(reference) AS derniereRef
        FROM r_fichefonction
        WHERE SUBSTR(r_fichefonction.reference,8,3) = SUBSTR(f_listefonction.reference,8,3)
        );
    en essayant d'appliquer votre solution j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT lstref.id_personne
        ,    lstref.reference
        ,    derref.derniereRef
    FROM     f_listefonction    AS lstref
        INNER JOIN
            (    SELECT    SUBSTR(r_fichefonction.reference,8,3) AS categorieRacine
                    ,    MAX(reference) AS derniereRef
                FROM    r_fichefonction
                GROUP BY r_fichefonction.categorieRacine
            )    AS    derref
            ON    categorieRacine = SUBSTR(lstref.reference,8,3)
            AND    lstref.reference <> derref.derniereRef
    ;
    qui ne fonctionne pas.

    Encore merci

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 138
    Par défaut
    Que signifie "qui ne fonctionne pas" ?
    Si erreur de syntaxe : quel est le message d'erreur ?
    Si résultats différents de ceux attendus : donnez un exemple
    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.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 41
    Par défaut
    Désolé pour le retard.
    La requete ne peut être executée :
    ORA-00933: SQL command not properly ended
    et le tout premier AS est surligné.

    Remplacer les <> en != (j'ai cru lire que ça posait problème parfois) ne cahnge rien.

    Encore merci à vous de vous occuper de mon cas.

Discussions similaires

  1. Récupérer la valeur max ou min d'une sous requête
    Par GhostSpirit dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/02/2015, 21h16
  2. [Hibernate]Traduire une sous requète en criteria?
    Par djodjo dans le forum Hibernate
    Réponses: 2
    Dernier message: 15/06/2006, 14h53
  3. Update avec une sous requête
    Par Deejoh dans le forum Installation
    Réponses: 7
    Dernier message: 25/01/2006, 12h50
  4. Ramener plusieurs champs dans une sous requête...
    Par David.V dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 12/01/2005, 08h54
  5. Réponses: 3
    Dernier message: 18/05/2003, 01h16

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