Bonjour ma problématiquement SQL simplifiée est la suivante :
Je souhaite récupérer tous les tuples d'une table qui ont la valeur 0 ou 2 du champ C3. Par contre, pour 2 tuples avec la même valeur C1, et avec l'un ayant une valeur du champ C3 à 0 et l'autre à 2, je souhaiterai ne récupérer que celle avec la valeur 2. Tous les champs de la table doivent être retournés.
Ci-dessous un exemple concret :
La clé primaire de la table est : C1, C2.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 T_TEST C1 C2 C3 1 1 0 1 2 2 2 3 0 4 4 3
Le champ C2 est unique fonctionnellement.
La requête doit retourner le résultat suivant :
La requête qui me permet de trouver ce résultat est la suivante. Je me pose la question de : peut-on l'optimiser pour éviter le "not in" ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 C1 C2 C3 1 2 2 2 3 0
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SELECT t.C1, t.C2, t.C3 FROM T_TEST t WHERE t.C3 = 2 UNION SELECT t1.C1, t1.C2, t1.C3 FROM T_TEST t1 WHERE t1.C3 = 0 AND t1.C1 not in ( SELECT t2.C1 FROM T_TEST t2 WHERE t2.C3=2 );
Partager