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 :

Select dans Select


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 273
    Par défaut Select dans Select
    Bonjour,

    Voilà mon problème. J'ai une vue qui est déjà crée. Celle-ci ressemble à qqc comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     select A.ID, B.AGE, C.SEXE, A.NOM, ...
    from A, B, C, ...
    where A.ID = B.ID, ....
    J'aimerais ensuite refaire un select sur une autre table avec une donnée de mon résult du premier select.

    Comme résultat final j'aurai donc le résultat de mon premier select + une colonne d'un deuxième.

    j'espère avoir été assez clair

    Merci pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 98
    Par défaut
    Euh je suis pas sur d'avoir bien compris,
    Mais tu as essaye cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select X,Y,Z,(SELECT A.ID, B.AGE, C.SEXE, A.NOM, ...
    FROM A, B, C, ...
    WHERE A.ID = B.ID, ....), from FROM T1,T2
    WHERE .....
    Je pense que c'est pas cela que tu veux lol.
    Si tu peux etre plus explicite lol.

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 273
    Par défaut
    oui je pense que tu as compris ce que je voulais. Dans ta réponse, est-ce normal d'avoir 2 x from ???

    Ne manque -t -il pas des choses dans ton code?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select X,Y,Z,(SELECT A.ID, B.AGE, C.SEXE, A.NOM, ...
    FROM A, B, C, ...
    WHERE A.ID = B.ID, ....) FROM T1,T2
    WHERE ...
    Je ne sais pas trop comment spécifier T1 qui serait le résultat de ma première requête et T2 qui serait ma table supplémentaire ...


    peux-tu être plus précis stp

    Merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 98
    Par défaut
    Ben T1,T2 c'est les autres tables sur lesquelles tu veux recuperer tes donnees..pour les ajouter aux données recupere dans A,B,C

    Et oui c'est normal d'avoir deux from vu que tu fait une requete imbrique.
    Sinon tu as une autre solution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select x from T1 where ...
     
    Union
     
    SELECT A.ID, B.AGE, C.SEXE, A.NOM, ...
    FROM A, B, C, ...
    WHERE A.ID = B.ID, ....
    Si tu vois pas ce que je veux dire, le mieux c'est que tu me disent précisemment le résultat de ta première requete avec la requete et la deuxième requete dont tu veux juxtaposer le resultat à la premiere.

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 273
    Par défaut
    OK donc voilà ce que j'aimerais:

    Disons que j'ai 5 tables A B C D E

    Ma première requête va rechercher des informations des tables A B C D.

    Ma deuxième requête consisterait à aller chercher une information se trouvant dans E avec comme critère de sélection, une information de la première requête.

    le résultat serait donc le résultat de la requête 1 + résultat requête 2

    j'espère avoir été plus clair

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 98
    Par défaut
    Alors voilà la solution
    On va dire que ta table E a comme champ a,b,c,d,e

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from E where
    E.a in (select a from A) and E.b in (select b from B) and ....
    C'est bon , c'est ca que tu voulais?

    Ce n'est pas un égal qu'il faut mettre mais bien un "in".
    Tu peux egalement mettre un " not in " si ta condition dit que ce membre ne doit pas exister dans cette table.

  7. #7
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 273
    Par défaut
    non pas vraiment ...

    bon:

    j'ai un select assez conséquent sur plusieurs tables.

    Ce select va me retourner plusieurs records.

    j'aimerais que dans la même requête SQL, je puisse utiliser ces records afin de refaire un select sur une autre table. Le résultat serait donc le résultat de ma requête 1 + le résultat de ma requête 2.

    Voilà ce que je veux (même si c'est pas la bonne syntaxe):


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT E.mavaleurextra, (select A.ID, B.NOM, C. PRENOM, D.AGE 
                                        from A,B,C,D
                                        where ....)
    FROM E, T2
    WHERE E.ID = T2.ID
    T2 étant le résultat de mon select dans le select.

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Salut,
    Je verais plutôt un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select t1.id,t1.age,t1.SEXE, t1.NOM,E.mavaleurextra
    from (SELECT A.ID, B.AGE, C.SEXE, A.NOM, ...
          FROM A, B, C
          WHERE A.ID = B.ID, ....
          ) t1, E
    where e.id=t1.id ....
    Donc une jointure et pas un select dans un select

    [EDIT] Ceci dit tu peux aussi utiliser les requêtes corrélées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT A.ID, B.AGE, C.SEXE, A.NOM,
           (select e.mavaleurextra from e where e.id=a.id) as mavaleurextra 
    FROM A, B, C
    WHERE A.ID = B.ID, ....
    si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (select e.mavaleurextra from e where e.id=a.id)
    ne renvoie qu'une ligne (et une colonne mais c'est déjà le cas )

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 98
    Par défaut
    A ok en plus de vouloir les deux champs tu as une jointure entre les tables ok je regarde

    Mais dans les champs de ta deuxième requete tu veux aussi les champs de ta premiere requete ou c'est juste pour faire une jointure?

    Si c'est ca je vois pas ou est le problème,
    Tu fais comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select E.mavaleur,A.ID,B.nom,C.prenom,D.age
    from E,A,B,C,D
    where E.ID=A.ID and A.ID=B.iD ....etc..
    Non?

    L'identifiant sur lequel tu fais ta jointure entre les membre de ta premiere requete et les membre de la 2 eme, il existe déjà dans ta table, ou est ce que justement c'est toi qui le créer à partir du résultat de ton autre requete?

  10. #10
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 273
    Par défaut
    le problème est que lorsque j'essaye d'ajouter une jointure à mon premier select, j'ai moins de record que prévu ...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 98
    Par défaut
    Tu as essayé la syntaxe que je t'ai donné?
    En regroupant tout dans une seule requete?

  12. #12
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 273
    Par défaut
    non, il n'y a pas de lien entre mes tables ..
    en fait, dans le premier select, je récupère une date et dans ma seconde table, j'ai 2 colonnes (apartirde et jusqua). il fo que je fasse un test disant que si la date de mon premier select est entre telle et telle date alors je prends une la valeur correspondante dans ma table "extra"

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 98
    Par défaut
    Dans ce cas là, effectivement c'est plus complexe, du sql pure ne te suffiras pas.
    Il faut passe au PL/sql en utilisant un case à mon avis.

  14. #14
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Je pense qu'il faut que tu expliques clairement en fournissant un jeu de test et le résultat souhaité.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 98
    Par défaut
    ET comme ca ca ne peut pas marcher?

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT A.ID,B.nom,C.prenom,D.age,(select champ from E where date>date_inf and date<date_sup)
    FROM A,B,C,D
    WHERE C.ID=A.ID AND A.ID=B.iD ....etc..

    [EDIT]Oui ca serait le mieux car j'ai vraiment du mal à voir le truc concretement.

  16. #16
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 273
    Par défaut
    bon voilà j'ai enfin réussi ce que je voulais faire.

    en fait il fallait faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     select ..., (select .. from matableextra where macondition)
    from .... 
    where ...
    macondition est en fait une condition qui teste si le résultat de mon premier select = une colonne de matableextra.



    Merci pour le coup de main en tout cas

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 98
    Par défaut
    Ok c'est bon alors.
    Mais c'est un peu la solution que l'on t'as présenté depuis le début lol.

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

Discussions similaires

  1. SELECT dans SELECT
    Par ehochedez dans le forum Développement
    Réponses: 2
    Dernier message: 07/09/2010, 04h24
  2. Select dans select
    Par bella1 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/11/2009, 16h19
  3. Réponses: 2
    Dernier message: 10/08/2009, 09h24
  4. PB Select dans Select
    Par amel123456789 dans le forum SQLite
    Réponses: 1
    Dernier message: 03/06/2008, 16h36
  5. Requête (select dans select)
    Par zut94 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/03/2006, 11h38

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