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

SQL Oracle Discussion :

Requête et sous-requête avec champ introuvable


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Février 2014
    Messages : 105
    Points : 57
    Points
    57
    Par défaut Requête et sous-requête avec champ introuvable
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT id.pri_0
    FROM piece ID
    INNER JOIN
                    (select MAX(ref_0) from piece where code_0='test') ID2
        ON (ID.ref_0=ID2.ref_0)
    ma requête pose problème au niveau de ID2.ref_0
    je ne comprend pas mon erreur
    est-ce que quelqu'un peut m'expliquer svp
    merci

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Et quel est le message d'erreur?

    Peut-être que dans la sous-requête
    select MAX(ref_0) from piece where code_0='test'
    il faut sélectionner le champ ref_0 pour pouvoir l'utiliser dans la jointure...
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Février 2014
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    je n'ai plus le code erreur en tête, mais en gros que ce champ n'est pas reconnu
    je peux essayer ton idée, merci
    par contre il est déjà dans le max

  4. #4
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Oui mais le max(col1) et col1 sont deux champs différents pour Oracle.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  5. #5
    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 801
    Points
    30 801
    Par défaut
    Il n'y a pas de colonne nommée ref_0 dans la table dérivée ID2. C'est pour cela qu'Oracle refuse la requête.
    Il n'y a pas de colonne nommée du tout d'ailleurs dans C]ID2[/C].

    Donnez un alias à l'expression MAX(ref_0) et ça fonctionnera sans doute mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  id.pri_0
    FROM    piece ID
        INNER JOIN
            (   SELECT  MAX(ref_0)  AS max_0 
                FROM    piece 
                WHERE   code_0 = 'test'
            )   ID2
        ON  ID.ref_0 = ID2.max_0
    ;
    Si c’est bien ça qui est recherché...
    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 du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Février 2014
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    bonjour,
    merci ça semble fonctionné mais pas tout à fait selon mes besoins, néanmoins

    en fait ce que je souhaite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  id.pri_0
    FROM    piece ID
        INNER JOIN
            (   SELECT  MAX(ref_0)  AS max_0 
                FROM    piece 
                WHERE   code_0 = 'test'
            )   ID2
        ON  ID.ref_0 = ID2.max_0
    ;
    c'est d'avoir le prix (id.pri) selon la référence de document la plus haute (MAX(ref_0)) pour chaque code(code_0), exemple :

    Source
    PRI | CODE | REF
    5.50 | 44561 | DOC222
    5.60 | 44561 | DOC111
    7.74 | 44897 | DOC865
    8.84 | 44897 | DOC889

    Résultat
    PRI | CODE
    5.50 | 44561
    8.84 | 44897

    merci de votre aide

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Regarde l'aide sur : Max (....) Keep (Dense_rank first order by ....)

    Mais attention, dans un manuel qui contient 20 chapitres sur les requêtes Oracle, on aborde généralement cette commande vers le chapître 15. Et toi, tu n'as pas lu ou pas compris les chapîtres 3 ou 4 ...
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Arkyano Voir le message
    bonjour,
    merci ça semble fonctionné mais pas tout à fait selon mes besoins, néanmoins

    en fait ce que je souhaite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  id.pri_0
    FROM    piece ID
        INNER JOIN
            (   SELECT  MAX(ref_0)  AS max_0 
                FROM    piece 
                WHERE   code_0 = 'test'
            )   ID2
        ON  ID.ref_0 = ID2.max_0
    ;
    c'est d'avoir le prix (id.pri) selon la référence de document la plus haute (MAX(ref_0)) pour chaque code(code_0), exemple :

    Source
    PRI | CODE | REF
    5.50 | 44561 | DOC222
    5.60 | 44561 | DOC111
    7.74 | 44897 | DOC865
    8.84 | 44897 | DOC889

    Résultat
    PRI | CODE
    5.50 | 44561
    8.84 | 44897

    merci de votre aide
    Hello...
    Je te propose ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          SELECT P1.PRIX, P1.CODE
          FROM PIECE P1
          WHERE P1.REF IN (SELECT MAX(P2.REF) FROM PIECE P2 WHERE P2.CODE = P1.CODE)
    Feedback please!

Discussions similaires

  1. Sous requête de sous requête qui ne marche pas
    Par mactwist69 dans le forum Développement
    Réponses: 2
    Dernier message: 27/10/2016, 17h24
  2. Réponses: 0
    Dernier message: 26/03/2013, 06h46
  3. [AC-2010] requête et sous-requête avec paramètres
    Par Ragmaxone dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 17/12/2012, 17h37
  4. Réponses: 3
    Dernier message: 05/11/2009, 12h09
  5. Requête et sous requête avec SELECT et UPDATE
    Par Véronique75ca dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 29/06/2006, 21h25

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