[MySQL] Requête group by optimisable?
Bonjour à tous !!
Je viens d'écrire une requête, qui fonctionne correctement (i.e, elle me renvoie bien les lignes attendues), houra ! :ccool:
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:
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):
Citation:
1 - 1 - 2
2 - 1 - 1
3 - 1 - 2
4 - 1 - 2
5 - 1 - 1
Le résultat que j'attends :
Citation:
3 - 1 - 2
4 - 1 - 2
5 - 1 - 1
Maintenant voici ma requête :
Code:
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.