Maison >base de données >tutoriel mysql >Comment puis-je compter les abonnements incluant des valeurs nulles pour les employés dans MySQL à l'aide de jointures externes ?

Comment puis-je compter les abonnements incluant des valeurs nulles pour les employés dans MySQL à l'aide de jointures externes ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-01 09:22:14626parcourir

How Can I Count Subscriptions Including Zero Values for Employees in MySQL Using Outer Joins?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn