Oui. ce que vous avez devrait fonctionner. (Vous devrez ajouter un alias sur la table dérivée, le message d'erreur que vous obtenez devrait être explicite. Facile à corriger, ajoutez simplement un espace et la lettre c (ou le nom de votre choix) à la fin de votre requête.
Il y a une mise en garde concernant le potentiel de duplication de (VoterID, ElectionID)
tuples.
Si vous avez une contrainte unique sur (VoterID, ElectionID), votre requête fonctionnera correctement.
Si vous n'avez pas de contrainte unique (qui interdit le doublon de (VoterID, ElectionId)
), alors il est possible qu'un électeur avec deux (2) lignes pour ElectionID 1 et aucune ligne pour ElectionID 2... pour que cet électeur soit inclus dans le décompte. Et un électeur qui a voté deux fois dans ElectionID 1 et une seule fois dans ElectionID 2, cet électeur sera exclu du décompte.
Inclure le mot-clé DISTINCT dans un COUNT résoudrait ce problème, par exemple
HAVING COUNT(DISTINCT ElectionID) = 2
J'écrirais la requête différemment, mais ce que vous avez fonctionnera.
Pour obtenir le nombre de VoterID qui ont participé à la fois à ElectionID 1 et ElectionID2, pour de meilleures performances, j'éviterais d'utiliser une vue en ligne (MySQL l'appelle une table dérivée). Je demanderais à la requête d'utiliser une opération JOIN à la place. Quelque chose comme ça :
SELECT COUNT(DISTINCT e1.voterID) AS NumVoters
FROM elections e1
JOIN elections e2
ON e2.voterID = e1.voterID
WHERE e1.electionID = 1
AND e2.electionID = 2
Si vous êtes assuré que (voterID, ElectionID)
est unique, alors la sélection pourrait être plus simple :
SELECT COUNT(1) AS NumVoters
FROM elections e1
JOIN elections e2
ON e2.voterID = e1.voterID
WHERE e1.electionID = 1
AND e2.electionID = 2