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 :

variables pas toutes liées dans select imbriqué


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2010
    Messages : 47
    Par défaut variables pas toutes liées dans select imbriqué
    Bonjour à tous,
    J'ai un problème au niveau d'un select.
    Mon boss veut que je fasse une requête assez importante
    Je dois fournir la liste des commandes n°, fournisseurs, date, fournisseur potentiel 1, fournisseur potentiel 2, fournisseur potentiel 3

    Le problème réside sur les fournisseurs potentiels.
    comment peut-on trier les fournisseurs potentiels en utilisant le n° du commande alors que ce numero doit être un des résultats de la requête

    J'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select <s>c.num</s>,c.fournisseur, c.daty, f.ref_fournisseur 
    (select f.fournisseur from fournisseurs f where num_f =:c.num and rownum = 1 ) fournisseur1 from commandes c   
    -- le num ici est <s>num</s>
    inner join fournisseurs f on
    c.num = f.num
    order by 1;
    mais il y a erreur du genre toutes les variables ne sont pas liées. Je pense que c'est surtout au niveau de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (select f.fournisseur from fournisseurs f where num_f =:c.num and rownum = 1    -- le num ici est <s>num</s>) fournisseur1
    Quelqu'un a t-il une idée?
    Merci d'avance
    Mialy Elodie

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    : dans du select, c'est pour binder des variables.
    Si tu veux faire référence à "<s>c.num</s>", enlève donc les :

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2010
    Messages : 47
    Par défaut
    J'ai enlevé les : mais comme erreur il y a
    c.num identificateur non valide

  4. #4
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Il manque une virgule entre f.ref_fournisseur et ton (SELECT...)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2010
    Messages : 47
    Par défaut
    Au fait merci mais j'avais mis une virgule dans ma requête, j'avais omis de le mettre ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT <s>c.num</s>,c.fournisseur, c.daty, f.ref_fournisseur, 
    (SELECT f.fournisseur FROM fournisseurs f WHERE num_f =:c.num AND rownum = 1 ) fournisseur1 FROM commandes c   
    -- le num ici est <s>num</s>
    INNER JOIN fournisseurs f ON
    c.num = f.num
    ORDER BY 1;
    mais le problème persiste encore

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2010
    Messages : 47
    Par défaut
    J'ai testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT c.num ,c.fournisseur, c.daty, f.ref_fournisseur, 
    (SELECT f.fournisseur FROM fournisseurs f
    inner join commandes c on f.num_f = c.num
     where rownum = 1 ) fournisseur1 FROM commandes c   
    -- le num ici est <s>num</s>
    INNER JOIN fournisseurs f ON
    c.num = f.num
    ORDER BY 1;
    mais la requête me renvoit le même fournisseur1 pour tous les numeros de commande

  7. #7
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    c'est normal, cette sous requête est autonome, elle n'est liée à aucune donnée d'une autre table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (SELECT f.fournisseur FROM fournisseurs f
    INNER JOIN commandes c ON f.num_f = c.num
     WHERE rownum = 1)
    Cette requête marche (enfin peut être pas en 8.1.7)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT c.num, c.fournisseur, c.daty, f.ref_fournisseur, 
    (SELECT f1.fournisseur FROM fournisseurs f1 WHERE f1.num_f =c.num AND rownum = 1 ) fournisseur1 
    FROM commandes c, fournisseurs f 
    WHERE c.num = f.num
    ORDER BY 1;

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2010
    Messages : 47
    Par défaut
    Merci beaucoup ça marche avec mon code

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2010
    Messages : 47
    Par défaut
    Au fait j'ai une petite question
    si je veux afficher un autre fournisseur fournisseur2,
    c'est faisable comme ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT c.num, c.fournisseur, c.daty, f.ref_fournisseur, 
    (SELECT f1.fournisseur FROM fournisseurs f1 WHERE f1.num_f =c.num AND rownum = 1 ) fournisseur1, (SELECT f1.fournisseur FROM fournisseurs f1 WHERE f1.num_f =c.num AND rownum = 2 ) fournisseur2 
    FROM commandes c, fournisseurs f 
    WHERE c.num = f.num
    ORDER BY 1;
    Merci beaucoup
    Vu que j'ai déjà rendu le résultat à mon boss je peux pas tester celui-là mais c'est juste à titre d'informations

  10. #10
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Non, ROWNUM = 2 n'est jamais réalisé : Rownum correspond au fetch, donc tant que tu n'as pas récupéré la première ligne, tu ne pourras pas récupérer la seconde.

    Regarde la FAQ sur rownum.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2010
    Messages : 47
    Par défaut
    Ok merci beaucoup et bonne continuation

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 19/09/2011, 16h52
  2. je n ai pas tout compris dans le script
    Par letigre dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2006, 10h44
  3. Réponses: 4
    Dernier message: 30/05/2006, 17h21
  4. Réponses: 11
    Dernier message: 04/05/2006, 11h50
  5. [Tableaux] Recuper toutes les options dans select
    Par Tempotpo dans le forum Langage
    Réponses: 6
    Dernier message: 13/04/2006, 14h26

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