[SQL] pb de sous requete avec plrs attributs

hinanui Messages postés 14 Statut Membre -  
hinanui Messages postés 14 Statut Membre -
Bonjour!!!

Voila, j ai un petit souci avec SQL. Je voudrais savoir s il est possible d utiliser une sous requete qui renvoie plusieurs lignes sur 2 colonnes et de tester si un couple fait parti de cette selection. En plus clair, voici la requete que je voudrais faire:

select...
from....
where (attribut1, attribut2) IN (
              select attribut1, attribut2
             from....
             where......
            )


j ai essaye de l executer ms ca plante, et je pense que ca vient du fait que je fais un test sur 2 attributs au lieu d un seul.... au fait, je bosse sous access 2000...

Est ce quelqu un aurait une idee lumineuse a me faire partager? :-)

merci d avance!!!!

5 réponses

  1. romain_natiez Messages postés 179 Statut Membre 31
     
    salut,
    moi, ce que g vu en cours cette année, c'est qu'une sous requète ne renvoyait qu'une seule valeur

    je pense que tu doit plutot utiliser un like, mais je suis pas sûr..

    ++
    Romain_natiez
    0
  2. DaNot Messages postés 221 Statut Membre 163
     
    Salut,

    Encore une limitation d'Access : il ne faut utiliser qu'une seule colonne dans une sous-requete avec l'operateur IN.
    La solution est d'utiliser l'operateur EXISTS :
    SELECT *
    FROM personnes p
    WHERE EXISTS (SELECT *
                   FROM test t
                   WHERE p.age = t.age
                   AND p.ville = t.ville);


    DaNot
    un Libre ouvert à la source...
    0
  3. hinanui Messages postés 14 Statut Membre
     
    (re)Bonjour!

    merci pour la reponse, mais en fait, ce q je voudrais serait de pouvoir recuperer un certain nombre de colonnes dont 2 qui feraient partie d'une liste de couples generee par une sous requete, d ou la comparaison avec un couple d attribut.
    En fait, ma vraie requete serait :

    select tblca.*
    from tblca
    where  ( tblca.etabid, tblca.annee) in 
    (SELECT tblCa.EtabID, Min(tblCa.Annee) AS annee
    FROM tblCa
    GROUP BY tblCa.EtabID);


    la sous requete renvoie pour chaque etabID l annee la plus ancienne connue pour un enregistrement. Et moi, je voudrais, par la requete principale, recuperer toutes les informations pour l annee la plus ancienne pour chaque etabID.

    je ne sais pas si c est tres clair, mais voila....

    je suis ouverte a toutes autres suggestions!

    merci d avance
    0
  4. DaNot Messages postés 221 Statut Membre 163
     
    Re-Salut,

    Bon, j'ai fait un petit exemple et j'ai trouver une solution :
    1. Faire une 1ere requete (min_tblCa par ex) retournant l'annee minimum pour chaque Id :
    SELECT tblCa.EtabID, Min(tblCa.Annee) AS annee
    FROM tblCa
    GROUP BY tblCa.EtabID;


    Ensuite, faire une seconde requete avec la table tblCa et la 1ere requete :
    select tblca.*
    from tblca, min_tblCa
    where  tblca.etabid = min_tblCa.etabid
    tblca.annee = min_tblCa.annee;


    DaNot
    un Libre ouvert à la source...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. hinanui Messages postés 14 Statut Membre
     
    merci pour l idee!
    0