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 MySQL Discussion :

Sous-requête dans la clause FROM avec référence vers d'autres tables de la clause FROM


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut Sous-requête dans la clause FROM avec référence vers d'autres tables de la clause FROM
    Bonjour à tous,

    Je cherche comment récupérer valeur boursière d'un titre, gràce à son identifiant idEquity, lors de l'achat de ce titre [investmentDetailDate]

    Voici les 3 tables que j'utilise:
    InvestmentDetail : {idInvestmentDetail,investmentDetailDate}
    InvestmentDetailEquity : {idInvestmentDetailEquity, idInvestmentDetail, IdEquity}
    EquityRate : {IdEquity, EquityRateDate, rate}


    La requete que j'ai conçue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    SELECT 
    	*
    FROM
    	InvestmentDetailEquity ide,
    	investmentdetail id,
    	(
    		SELECT
    			er.rate
    		FROM 
    			EquityRate er
    		WHERE
    			er.EquityRateDate<id.investmentDetailDate
    			and 
    			er.idEquity = ide.idEquity
    		limit 1) sub
    WHERE
    ide.idinvestmentdetail = id.idInvestmentDetail
    Mais je me prend une erreur:
    #1054 - Unknown column 'id.investmentDetailDate' in 'where clause'

    N'est-il pas possible de réaliser ce genre de requete?
    La question pourrait très bien être "Donne moi le taux de change de la devise XX à la date YY"

    Merci pour votre aide

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 150
    Points : 157
    Points
    157
    Par défaut
    Bonsoir,

    Votre table est Investmentdetail alors que dans la clause FROM vous écrivez investmentdetail (erreur de frappe je suppose).
    Dans votre sous-requête présente dans l'extension de la clause from :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT er.rate
            FROM EquityRate er
            WHERE
                er.EquityRateDate<id.investmentDetailDate
                and 
                er.idEquity = ide.idEquity
            limit 1)
    Vous ne pouvez pas utiliser id.investmentDetailDate car vous avez sélectionner uniquement la table EquityRate d’où votre message d'erreur. La sous-requête doit vous renvoyer un résultat qui sera utiliser comme table intermédiaire pour arriver a vos fin, elle est indépendante de votre premier SELECT. Je n'ai pas tellement compris le but de votre requête si vous me donnez plus de détails je pourrai peut-être vous répondre avec plus de précision.
    Bon courage.

  3. #3
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut
    bonjour,

    Votre table est Investmentdetail alors que dans la clause FROM vous écrivez investmentdetail (erreur de frappe je suppose).
    SQL n'est pas sensible à la casse. Donc 'Investmentdetail' ou 'investmentdetail' sont traités de la même façon.

    Vous ne pouvez pas utiliser id.investmentDetailDate car vous avez sélectionner uniquement la table EquityRate d’où votre message d'erreur.
    En regardant dans le SELECT principal, j'ai un alias "id" qui est défini sur la table InvestmentDetail. Tout comme l'alias "ide" qui pointe sur InvestmentDetailEquity.

    De toute façon, si j’intervertis les 2 opérandes de l'opérateur 'AND' j'obtiens la même erreur sauf que le problème proviendra de l’inexistence de la colonne 'IdEquity'.
    Ce que je crois comprendre c'est que d'une sous requete d'une clause FROM, je ne peux pas faire référence aux autres tables définies dans cette clause FROM.

    L'objectif de cette requête est d'obtenir le taux [EquityRate.Rate] de l'Equity [IdEquity] le jour de son achat [investmentDetail.investmentDetailDate].

    Pour contourner ce problème, j'ai remonté la sous requete dans la clause SELECT.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    SELECT 
    	ide.*,
            id.*,
    	(
    		SELECT
    			er.rate
    		FROM 
    			EquityRate er
    		WHERE
    			er.EquityRateDate<id.investmentDetailDate
    			and 
    			er.idEquity = ide.idEquity
    		limit 1) as taux
    FROM
    	InvestmentDetailEquity ide,
    	investmentdetail id
    WHERE
    ide.idinvestmentdetail = id.idInvestmentDetail

Discussions similaires

  1. [11g] Sous-requête dans la clause FROM
    Par FANDENEGI dans le forum SQL
    Réponses: 6
    Dernier message: 20/02/2014, 13h50
  2. Quelle méthode si pas de sous-requête dans FROM clause
    Par ehochedez dans le forum Requêtes
    Réponses: 7
    Dernier message: 06/05/2012, 19h11
  3. Sous-requête dans un FROM ou table temporaire
    Par dachman dans le forum Développement
    Réponses: 7
    Dernier message: 02/12/2008, 12h41
  4. Sous requête dans un FROM en HQL
    Par mastamx dans le forum Hibernate
    Réponses: 1
    Dernier message: 20/05/2008, 14h54
  5. Sous-requête dans la clause Select
    Par Danger dans le forum WinDev
    Réponses: 2
    Dernier message: 24/05/2005, 17h33

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