Gestion des comptes nuls dans MySQL avec OUTER JOINS
Lorsque vous travaillez avec des bases de données relationnelles, il peut être difficile d'afficher des valeurs nulles lors d'une requête sur plusieurs tableaux. Par exemple, considérons le scénario décrit dans la question, dans lequel nous avons deux tables : Employee et mailingSubscriptions. La table Employee contient des informations de base sur les employés, tandis que la table mailingSubscriptions suit leur statut d'abonnement aux e-mails.
Pour compter le nombre d'abonnements pour chaque employé, nous pouvons utiliser la requête suivante :
SELECT COUNT(c.Name) FROM Employee INNER JOIN mailingSubscriptions as m ON c.Name = m.EmployeeName;
Cependant, cette requête ne renverra que le nombre d'employés qui ont au moins une entrée dans la table mailingSubscriptions. Si un employé n'est pas encore abonné à des e-mails, son décompte sera omis des résultats.
Pour inclure des valeurs nulles pour les employés sans abonnement, nous devons utiliser une jointure externe. Une jointure externe nous permet de combiner les lignes de deux tables même si elles n'ont pas de valeurs correspondantes. Dans ce cas, nous utiliserons une jointure externe gauche, qui conservera toutes les lignes de la table Employee, qu'elles aient ou non des lignes correspondantes dans la table mailingSubscriptions.
La requête suivante utilise une jointure externe gauche pour calculer le nombre d'abonnements pour chaque employé, y compris ceux sans abonnement :
SELECT c.name, count(m.mailid) FROM Employee LEFT JOIN mailingSubscriptions as m ON c.Name = m.EmployeeName GROUP BY c.name;
La clause GROUP BY c.name garantit que nous comptons les abonnements pour chaque employé séparément. Le résultat de la requête sera une liste de noms d'employés et le nombre d'abonnements correspondants, avec des valeurs nulles affichées pour les employés qui ne se sont encore abonnés à aucun e-mail.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!