[SQL] pb de sous requete avec plrs attributs

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

  • Votes
  • Date
  • Date décroissante
  1. 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
    1. 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...
      1. (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
        1. 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...