Bonjour,
J'aurai besoin d'aide pour l'optimisation d'une requête.

Table A
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
IdA | IdB
---------
 1  | c2
 2  | c1
 3  | f3
 4  | c4
 5  | e4
 6  | c2
 7  | d4
Table B
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
IdB | a | b 
------------
c2  | 1 | 2
c1  | 1 | 4
f3  | 1 | 6
c4  | 2 | 3
e4  | 6 | 5
c2  | 1 | 3
d4  | 4 | 4
Comme résultat je souhaiterai donc :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
IdA | IdB | a | b 
------------
 2  | c1  | 1 | 4
 4  | c4  | 2 | 3
Voici ma requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
SELECT *
FROM TableA A
 JOIN TableB B
 ON A.IdB = B.IdB
 AND IdB like 'c%'
 
WHERE IdB not in (Select IdB
     FROM TableB
     WHERE a = '1'
     AND b in ('2','3','5'))
Or je manipule des millions d'enregistrements et je souhaiterai optimiser tout cela.
J'ai regardé le cours : http://sqlpro.developpez.com/cours/optimiser/#L9
Et la règle 10 me montre bien comment optimiser le "not in" mais j'avoue ne pas bien saisir le "LEFT OUTER JOIN".
Même après ce cours http://sqlpro.developpez.com/cours/s...ntures/#LIII-C j'ai quelques doutes quand à la construction de ma requête.
En effet je bloque avec la condition "AND IdB like 'c%'", comment dois-je agencer tout ça ?

Merci