Bonjour,
Je viens vous exposer un petit problème de compréhension sur un comptage d'association. Après des recherches sur le net, n'ayant probablement pas pu trouver les bons mots-clés, j'ai fait choux-blanc... j'ai trouvé des sujets, mais qui donnaient le même résultat que ce que j'avais essayé.
J'ai une table licences et une table assoc_licencemaintenance :
et la table assoc_licencemaintenance ne contient que trois champs : id(PK), id_licence(FK) et id_maintenance(FK).
Voici leur contenu :
Association :
Licence :
J'aimerais faire une requête qui récupère tous les champs de ma table licences et le nombre d'id de ma table assoc_licencemaintenance avec un filtre qui ne récupère que les enregistrements dont id_contrat=x et etat=true.
Pour aider à la compréhension voici la requête que j'ai pondue :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT li.*, count(ma.id) FROM licences as li JOIN assoc_licencemaintenance as ma ON li.id=ma.id_licence WHERE li.id_contrat='91' AND li.etat=true;
Seulement, si mes licences actives avec le bon id_contrat ne possèdent pas de contrat de maintenance (aucune clé étrangère dans la table assoc_licencemaintenance ne possédant leur id) elles ne sont pas remontées dans le résultat de la requête (a cause de la clause ON) :
Cela devrait me remonter 3 résulats, avec 1 count(ma.id) à 2 et les autres à 0.
J'aimerais comprendre, comment je pourrais faire pour remonter TOUTES les licences actives avec un id_contrat=x, et compter leur occurences d'id dans la clé étrangère id_licence de la table d'association assoc_licencemaintenance. (ou alors il faut que je fasse un trigger qui met un enregistrement bidon dans la table d'assoc à chaque création de licence, et que je count -1 ?)
Merci beaucoup pour vos éclaircissements, j'avoue ne pas être coutumier avec MySQL (j'en suis resté aux CRUDs, aux jointures simples ... )![]()
Partager