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 :

Requête résultat sous requête


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut Requête résultat sous requête
    Bonjour à tous,
    je bloque sur une petite requête que voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT TXT_COMMENT FROM GTM_BUILDING_SITE WHERE CD_GTM_BUILDING_SITE = 
    (SELECT CD_BUILDING_ORIGIN FROM GTM_MUTATION WHERE CD_GTM_MUTATION =
    (SELECT CD_GTM_MUTATION FROM GTM_MUTATION_LINE WHERE CD_GTM_MUTATION_LINE = 
    (SELECT MAX(CD_GTM_MUTATION_LINE) FROM GTM_MUTATION_LINE WHERE CD_BOX = 
    (SELECT CD_BOX FROM BOX WHERE TXT_USERINFO like '%xxx%' AND (VAL_STATE = '8' OR VAL_STATE = '7')))))

    Pour le moment seul le txt_comment ressort, mais j'aimerai aussi ressortir:

    txt_comment (from GTM_BUILDING_SITE) , cd_building_origin (from GTM_MUTATION ) , cd_box et txt_quotefield (from BOX).

    Je n'arrive donc pas à faire remonter les résultats que j'obtient dans mes sous-requêtes ainsi que mettre 2 paramètre dans mon SELECT ... FROM BOX.

    Merci de votre aide !!


    PS: est-il possible d'optimiser cette requête ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 240
    Points : 12 872
    Points
    12 872
    Par défaut
    Bonjour,
    Pourquoi ne pas passer par des jointures, plutôt que d'imbriquer des requêtes ?

    Tatayo

  3. #3
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut
    ça pourrait résoudre mon problème ?
    Si oui comment faire exactement parce que j'ai essayé mais n'y étant pas arrivé j'ai opté pour les requêtes imbriquées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT T1.CD_BOX, T1.TXT_QUOTEFIELD,T2.CD_BUILDING_ORIGIN, T3.TXT_COMMENT
    FROM BOX T1
        JOIN GTM_MUTATION_LINE ON GTM_MUTATION_LINE.CD_BOX = T1.CD_BOX
        JOIN GTM_MUTATION T2 ON T2.CD_GTM_MUTATION = GTM_MUTATION_LINE.CD_GTM_MUTATION
        JOIN GTM_BUILDING_SITE T3 ON T3.CD_GTM_BUILDING_SITE = T2.CD_BUILDING_ORIGIN
    WHERE T1.TXT_USERINFO like '%xxx%'
    J'ai presque réussi, mais comment inclure le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(CD_GTM_MUTATION_LINE) FROM GTM_MUTATION_LINE
    car actuellement la requête me retourne plusieurs lignes...

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,
    quel est votre SGBDR ?

  5. #5
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour,
    quel est votre SGBDR ?
    Oracle

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    est-ce que ceci vous donne ce que vous voulez ?

    (il y a peut être des erreurs dans les jointures, mais sans la structure de vos tables, difficile de s'y retrouver... enfin le principe est là)

    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
     
    SELECT		LesColonnes
    FROM		GTM_BUILDING_SITE A
    INNER JOIN	GTM_MUTATION	B
    	ON			B.CD_GTM_BUILDING_SITE = A.CD_BUILDING_ORIGIN
    INNER JOIN	GTM_MUTATION_LINE C
    	ON			C.CD_GTM_MUTATION = B.CD_GTM_MUTATION
    INNER JOIN	(
    	SELECT	MAX(CD_GTM_MUTATION_LINE)  MaxMutation
    	FROM	GTM_MUTATION_LINE D
    	INNER JOIN BOX E
    		ON	E.CD_BOX = D.CD_BOX
    	WHERE	TXT_USERINFO LIKE '%xxx%' 
    	AND		(VAL_STATE = '8' OR VAL_STATE = '7')
    ) T
    	ON T.MaxMutation = C.CD_GTM_MUTATION_LINE

  7. #7
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut
    ça marche presque !

    Le problème c'est que, "LesColonnes" comme vous les avez appelées sont:
    txt_comment (from GTM_BUILDING_SITE) , cd_building_origin (from GTM_MUTATION ) , cd_box et txt_quotefield (from BOX)

    or

    txt_quotefield se trouve dans les tables BOX et GTM_MUTATION. Et c'est le celui de la table GTM_MUTATION qui resort.

    Comment prendre le bon (celui de la table BOX) ?

    Merci !

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    en l'ajoutant dans la sous requete (table dérivée).

    Mais si vous avez plusieurs lignes correspondantes dans la table BOX, lequel prendre ?

    La encore, avec la structure des tables et une demande clair et précise, on comprendrait mieux le problème, et on pourrait vous donner une solution plus rapidement, et plus optimisée...

  9. #9
    Membre du Club
    Inscrit en
    Avril 2013
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 148
    Points : 58
    Points
    58
    Par défaut
    Plus clairement:

    Les champs a ramener sont:
    txt_comment (from GTM_BUILDING_SITE)
    cd_building_origin (from GTM_MUTATION )
    cd_box (from BOX)
    txt_quotefield (from BOX)

    Ce qui donne:

    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
    SELECT	cd_box,txt_quotefield,cd_building_origin,txt_comment
    FROM		GTM_BUILDING_SITE A
    INNER JOIN	GTM_MUTATION	B
    	ON			B.CD_GTM_BUILDING_SITE = A.CD_BUILDING_ORIGIN
    INNER JOIN	GTM_MUTATION_LINE C
    	ON			C.CD_GTM_MUTATION = B.CD_GTM_MUTATION
    INNER JOIN	(
    	SELECT	MAX(CD_GTM_MUTATION_LINE)  MaxMutation
    	FROM	GTM_MUTATION_LINE D
    	INNER JOIN BOX E
    		ON	E.CD_BOX = D.CD_BOX
    	WHERE	TXT_USERINFO LIKE '%xxx%' 
    	AND		(VAL_STATE = '8' OR VAL_STATE = '7')
    ) T
    	ON T.MaxMutation = C.CD_GTM_MUTATION_LINE

    Or le champs TXT_QUOTEFIELD est présent dans les tables GTM_MUTATION, BOX et GTM_MUTATION_LINE.

    Et quand j'execute cette requête, elle me retourne le TXT_QUOTEFIELD de la table GTM_MUTATION_LINE, alors que je voudrais le TXT_QUOTEFIELD de la table BOX.


    Merci

Discussions similaires

  1. Affichage des résultats d'une requête et sous requête
    Par ecarbill dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 24/09/2012, 15h50
  2. sous requête, résultat concaténé
    Par eldrad95 dans le forum Développement
    Réponses: 1
    Dernier message: 04/10/2011, 15h01
  3. Réponses: 1
    Dernier message: 22/03/2011, 18h00
  4. 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
  5. Requêtes et sous requêtes
    Par lau2nyce dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/03/2004, 15h14

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