Ano. to co máš by mělo fungovat. (Do odvozené tabulky budete muset přidat alias, chybová zpráva, kterou dostanete, by měla být srozumitelná. Snadná oprava, stačí přidat mezeru a písmeno c (nebo jakýkoli název, který chcete) na konec vašeho dotazu.
Existuje jedno upozornění ohledně možného duplicitního (VoterID, ElectionID)
n-tice.
Pokud máte jedinečné omezení (VoterID, ElectionID), bude váš dotaz fungovat dobře.
Pokud nemáte jedinečné omezení (které neumožňuje duplikovat (VoterID, ElectionId)
), pak existuje potenciál pro voliče se dvěma (2) řádky pro ElectionID 1 a žádné řádky pro ElectionID 2... pro tohoto voliče, aby byl zahrnut do sčítání. A volič, který hlasoval dvakrát v ElectionID 1 a pouze jednou v ElectionID 2, bude tento volič ze sčítání vyloučen.
Zahrnutí klíčového slova DISTINCT do COUNT by tento problém vyřešilo, např.
HAVING COUNT(DISTINCT ElectionID) = 2
Napsal bych dotaz jinak, ale to, co máte, bude fungovat.
Abych získal počet VoterID, který se účastnil jak ElectionID 1, tak ElectionID2, pro lepší výkon bych se vyhnul použití inline zobrazení (MySQL to nazývá odvozenou tabulkou). Místo toho bych nechal dotaz použít operaci JOIN. Něco jako toto:
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
Pokud máte zaručeno, že (voterID, ElectionID)
je jedinečný, pak by výběr mohl být jednodušší:
SELECT COUNT(1) AS NumVoters
FROM elections e1
JOIN elections e2
ON e2.voterID = e1.voterID
WHERE e1.electionID = 1
AND e2.electionID = 2