Rechercher : dans
Par :

[SQL] pb de sous requete avec plrs attributs

Dernière réponse le 23 jun 2004 à 11:48:33 hinanui, le 23 jun 2004 à 10:26:49 
 Signaler ce message aux modérateurs

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!!!!

Meilleures réponses pour « [SQL] pb de sous requete avec plrs attributs » dans :
Le langage SQL VoirQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,...
SQL - Sous-requêtes VoirExpression des sous-requêtes Effectuer une sous-requête consiste à effectuer une requête à l'intérieur d'une autre, ou en d'autres termes d'utiliser une requête afin d'en réaliser une autre (on entend parfois le terme de requêtes en...
SQL - Restriction VoirExpression des restrictions Une restriction consiste à sélectionner les lignes satisfaisant à une condition logique effectuée sur leurs attributs. En SQL, les restrictions s'expriment à l'aide de la clause WHERE suivie d'une condition logique...

1

romain_natiez, le 23 jun 2004 à 10:33:18

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

Répondre à romain_natiez

2

DaNot, le 23 jun 2004 à 10:35:50

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...

Répondre à DaNot

3

hinanui, le 23 jun 2004 à 11:07:51

(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

Répondre à hinanui

4

DaNot, le 23 jun 2004 à 11:37:10

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...

Répondre à DaNot

5

 hinanui, le 23 jun 2004 à 11:48:33

Merci pour l idee!

Répondre à hinanui
Collection CommentÇaMarche.net