Aide requête SQL

One -  
 rufus -
Bonjour,
Voilà, j'aimerais pour une clé (composée de plusieurs champs), récupérer les enregistrements qui n'ont pas de correspondance dans une seconde table avec la même clé.
Par exemple : clé = champ1 , champ2
On a 2 tables : tab1 et tab2
Je voudrais donc récupérer les enregistrements de la tab1 pour qui la clé champ1,champ2 n'existe pas dans la tab2.

J'ai fais cette requête :

select champ1, champ2
from tab1 a
where not exists
( select champ1, champ2
from tab2 b
where a.champ1 = b.champ1
and a.champ2 = b.champ2
)

Cette requête marche mais je voudrais savoir s'il n'y a pas une requête un peu plus simple et certainement moins couteuse en temps de traitements....

Merci de votre aide.

3 réponses

rufus
 
peut etre

select champ1.tab1, champ2.tab1 from tab1,tab2 where champ1.tab2=champ1.tab2 and champ2.tab2=champ3.tab3;

voir syntaxe en fonction de ton SGBD
mais ça consommera plus de ressources par contre en temps de traitement ça devrait être un poil mieux

en clair si ta requette passe 15% de CPU en 20secondes
là tu risque d'avoir du 20% de CPU mais sur 15 secondes...

donc attention aux risques de saturer la CPU si tu as une petite config et/ou peu de RAM ou une RAM trop lente car dans ces cas là tu perds tous les avantages de ce type de requettes.
0
One
 
Merci!
Mais je crois que la requête que tu m'as donné permet de récupérer les enreg qui ont des correspondances or moi ce que je voulais c'était ceux qui n'ont pas de correspondance.
En ce qui concerne les perfs, il n'y a pas de prob de CPU donc il me faut surtout un gain de temps.

merci
0
rufus
 
mais c'est pareil suffit de téster differend de au lieu de =à

.........where tab1.valeur <> tab2.valeur and ..............
0