Bonjour à tous,


J'ai des clients, des dépôts, des visites.

Un client est rattaché à un dépôt.
Une visite est rattaché à un client et à un dépôt.

J'ai besoin de récupérer l'ensemble des clients qui, soit son rattachés à un dépôt particulier, soit on eu une visite qui elle est rattaché à ce dépôt.

La sélection des clients du dépôt est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
SELECT * FROM TBClients WHERE CDepId=25
La sélection des clients qui ne sont pas rattachés à ce dépôt mais qui ont eu une visite rattaché au dépôt est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
SELECT c2.ClientId FROM TBClients c2 WHERE c2.CDepId != 25 AND c2.ClientID IN
(
    SELECT DISTINCT VClientId FROM TBVisites WHERE VDepId = 25
)
Ces deux requêtes sont rapides à exécuter. Par contre, j'aimerai n'en faire qu'une :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
SELECT * FROM TBClients WHERE CDepId=25 or ClientId in
(
    SELECT DISTINCT VClientId FROM TBVisites WHERE VDepId = 25
)
Et là ça met 30 secondes à s'exécuter...


Comment je peux faire pour avoir une seule requête ayant la rapidité des deux premières ?


Merci beaucoup;

A bientôt