Requête SQL

one -  
 one -
Bonjour,
J'ai un ptit problème de requete : J'ai 3 tables qui sont ainsi :
Tab1 type groupe compte
Tab2 type identifiant
Tab3 identifiant compte
(Quand c'est le même nom c'est que c'est le même champ)
Ce que je veux c'est à partir de la tab2, pour chaque type,
faire une jointure sur Tab1 et récupérer les comptes pour chaque groupe différent.
Ensuite resortir les groupes qui n'ont aucun compte dans la tab3 selon l'identifiant dans tab2 du type.
Tout cela dans une seule requete.
Mon problème est essentiellement de pouvoir récupérer les comptes pour chaque groupe
différents pour ensuite pouvoir comparer les comptes.
Merci de votre aide.

8 réponses

teebo Messages postés 33570 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
Salut,
autrement dit ta tab2 est une association.
Pourquoi tu veux faire ca dans une seule requete? Tu comptes mettre ca dans une table? Tu n'auras aps les memes champs...Ca me parait bizzare ton histoire...

*,*  Ce post a été écrit entièrement *,*
\_/  avec des molécules recyclées   \_/
0
one
 
Salut,
En gros oui il me faut qu'une seule requete et en sortie il me faut juste le champ type et le champ groupe, soit selon le type avoir les groupe qui n'ont aucune correspondance avec les comptes dans la tab3.
En fait, dû à un problème technique (dont je n'ai pas le droit de modifier quoi que ce soit) je dois absoluement le faire en une seule requete.
Merci
0
teebo Messages postés 33570 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
Bon, le plus simple est de faire deux requete incluse dans une troisieme qui unifie les deux:

SELECT ce que tu veux FROM (requete1, requete2) WHERE conditions; non? Ca depend de ta base aussi, MySql notamment ne le permet pas je crois...

*,*  Ce post a été écrit entièrement *,*
\_/  avec des molécules recyclées   \_/
0
one
 
Eh bien en fait j'ai un problème pour regrouper dans la tab1 le champ groupe pour ne récupérer que les comptes qui sont du même groupe et pouvoir traiter les groupes indépendamment.
Je suis sous DB2.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Céline
 
Salut,

>Ce que je veux c'est à partir de la tab2, pour chaque type,
>faire une jointure sur Tab1 et récupérer les comptes pour chaque >groupe différent.

Essayes ça :
select tab1.*
from tab1, tab2
where tab1.type=tab2.type
group by tab1.groupe;

>Ensuite resortir les groupes qui n'ont aucun compte dans la tab3 >selon l'identifiant dans tab2 du type.

Essayes ça mais je doute car je n'ai pas trop compris ce que tu voulais :
select tab1.groupe
from tab1
where tab1.type in
(select tab2.type from tab2
where tab2.identifiant not in
(select tab3.identifiant from tab3 ));

Je te laisse voir si tu peux en faire une seule requête, tu devrais peut être regarder si la solution ne serait pas en utilisant une jointure externe ?

@ +
0
mohammed
 
salut,
si j'ai bien compris votre pblème:
select compte from tab1 where compte not in (
select tab2.comte from tab2,tab3 where tab2.id=tab3.id);
j'espère que sa marcherai.
à+.
Merci.
0
one
 
Re Bonjour,
Bon j'ai trouvé ma requête miracle mais je ne sais pas si on a le droit. Voici la requete :
SELECT x.type, x.groupe
FROM TAB1 x
WHERE NOT EXISTS
(SELECT z.compte
FROM (
SELECT y.compte
FROM TAB1 y
WHERE y.type = x.type
AND y.groupe = x.groupe
) z ,
(
SELECT c.compte
FROM TAB2 t,
TAB3 c
WHERE t.type = x.type
AND c.identifiant = t.identifiant
) a
WHERE z.compte = a.compte
)

Mais le problème est que le qualificatif de colonne x n'est pas reconnu dans les sous-requêtes .... Quelqu'un aurait-il une idée?
Merci pour ceux qui m'ont répondu et merci à ceux qui vont répondre à cette question aussi ;-p
0
one
 
Bon j'ai ma solution et ca marche :-))
SELECT distinct x.type , x.groupe
FROM Tab1 x
WHERE NOT EXISTS
( SELECT z.compte
FROM (
SELECT *
FROM Tab1
) z ,
(
SELECT *
FROM Tab2 t, Tab3 c
WHERE c.identifiant = t.identifiant

) a
WHERE z.type = x.type
AND z.groupe = x.groupe
AND a.type = x.type
AND z.compte = a.compte
);
Voilà....
Merci
0