Autojointure correcte ?

Le
Dominique Ottello
Bonjour,

Pour récupérer diverses informations sur un matricule avion (c_mat) ET
le nombre d'avion du même "genre" (c_genre) dans une seule requête
MySql, j'ai fait une autojointure sur la même table comme suit :

SELECT A.c_mat AS matricule,
A.c_genre AS genre_avion,
autres données
DATE_FORMAT(A.c_daci,'%d-%m-%Y') AS daci,
A.c_legende AS legende,
COUNT(B.c_mat) AS nb_avions
FROM constel_afr AS A
INNER JOIN constel_afr AS B ON A.c_genre = B.c_genre
WHERE A.c_mat = 'F-BAZE'
GROUP BY matricule

Néanmoins, bien que cela fonctionne comme je le souhaitais, j'ai comme
un doute sur cette « sémantique ».
Mes doutes sont-ils infondés ?

Merci.

Pour info, utilisé ici :
http://aviatechno.free.fr/constellation/suivi_matricule.php?mat=F-BAZH
pour afficher (x sur y)
--
Aujourd'hui, l'idéal du progrès est remplacé par l'idéal de l'innovation :
il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit nouveau,
même si c'est pire qu'avant et cela de toute évidence. Montherlant
Technologie aéronautique - http://ottello.net - Les anciens de Vilgénis
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
P'tit Marcel
Le #21901681
Dominique Ottello a écrit :
SELECT A.c_mat AS matricule,
A.c_genre AS genre_avion,
... autres données ...
DATE_FORMAT(A.c_daci,'%d-%m-%Y') AS daci,
A.c_legende AS legende,
COUNT(B.c_mat) AS nb_avions
FROM constel_afr AS A
INNER JOIN constel_afr AS B ON A.c_genre = B.c_genre
WHERE A.c_mat = 'F-BAZE'
GROUP BY matricule
Néanmoins, bien que cela fonctionne comme je le souhaitais, j'ai comme
un doute sur cette « sémantique ».



Tu as raison d'avoir des doutes: je pense que ça passera avec mysql qui
est très tolérant mais pas avec d'autres sgbd.
le problème: count ne peut coexister en sortie qu'avec d'autres
fonctions de regroupement (min, max) ou avec les colonnes mentionnés
dans le group by.

dans ton cas, je te suggère :
(on suppose que c_mat est une clé unique de la table)

SELECT A.c_mat AS matricule,
min(A.c_genre) AS genre_avion,
... autres données en min ...
min(DATE_FORMAT(A.c_daci,'%d-%m-%Y')) AS daci,
min(A.c_legende) AS legende,
COUNT(B.c_mat) AS nb_avions
FROM constel_afr AS A
INNER JOIN constel_afr AS B ON A.c_genre = B.c_genre
WHERE A.c_mat = 'F-BAZE'
GROUP BY A.c_mat


eça
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/
Publicité
Poster une réponse
Anonyme