Bonjour à tous !!

Je viens d'écrire une requête, qui fonctionne correctement (i.e, elle me renvoie bien les lignes attendues), houra !

Mais je me demandais, par simple curiosité, si c'est la meilleure façon de faire, et sinon, comment feriez vous??

Allez, maintenant, je présente les choses :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
table 
T_CAL
( 
CAL_ID SMALLINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
CALTYP_ID  SMALLINT NOT NULL REFERENCES T_CAL_TYPE(CALTYP_ID), 
RF_ID SMALLINT NULL,
CHAIN_ID SMALLINT NULL
);
 
 
T_CAL_TYPE
(
CALTYP_ID SMALLINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
CALTYP_NAME VARCHAR(40) NOT NULL
)
 
 
Y'a d'autres colonnes sur ces 2 tables, mais on s'en tamponne :)
Le but de la requête : pour chaque groupe (RF_ID, CHAIN_ID) de la table T_CAL (ainsi que pour un autre filtre dans le WHERE), je veux conserver uniquement les CAL_ID de telle sorte que ces CAL_ID ne soit pas le minimum pour ce groupe (RF_ID, CHAIN_ID) là.

Exemple (des lignes de la table T_CAL):
1 - 1 - 2
2 - 1 - 1
3 - 1 - 2
4 - 1 - 2
5 - 1 - 1
Le résultat que j'attends :

3 - 1 - 2
4 - 1 - 2
5 - 1 - 1
Maintenant voici ma requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
SELECT cal1.cal_id FROM t_cal cal1
INNER JOIN t_cal_type ty ON ty.caltyp_id = cal1.caltyp_id
LEFT OUTER JOIN
 
(SELECT min(cal.cal_id) as minB FROM t_cal cal
INNER JOIN t_cal_type type1 ON type1.caltyp_id = cal.caltyp_id
WHERE type1.CALTYP_NAME='RCHAIN'
GROUP BY cal.rf_id, cal.chain_id) as te
 
ON minB = cal1.cal_id
WHERE ty.caltyp_name='RCHAIN'
AND minB IS NULL
Cette requête fait bien ce que j'attends, mais est ce qu'il y'a plus simple? plus optimisé? Comment auriez vous fait?

D'avance, je vous dis bien merci ! !

Mickaël.