Tak. to, co masz, powinno działać. (Będziesz musiał dodać alias do tabeli pochodnej, komunikat o błędzie, który otrzymasz, powinien być oczywisty. Łatwe do naprawienia, po prostu dodaj spację i literę c (lub inną nazwę) na końcu zapytania.
Jest jedno zastrzeżenie dotyczące możliwości zduplikowania (voterID, ElectionID)
krotki.
Jeśli masz unikalne ograniczenie (VoterID, ElectionID), twoje zapytanie będzie działać poprawnie.
Jeśli nie masz unikalnego ograniczenia (co uniemożliwia duplikowanie (VoterID, ElectionId)
). A wyborca, który zagłosował dwa razy w ElectionID 1 i tylko raz w ElectionID 2, zostanie wykluczony z liczenia.
Dołączenie słowa kluczowego DISTINCT do COUNT rozwiąże ten problem, np.
HAVING COUNT(DISTINCT ElectionID) = 2
Zapytałbym inaczej, ale to, co masz, będzie działać.
Aby uzyskać liczbę VoterID, który uczestniczył zarówno w ElectionID 1, jak i ElectionID2, w celu poprawy wydajności, unikałbym używania widoku wbudowanego (MySQL nazywa go tabelą pochodną). Miałbym zapytanie użyć zamiast tego operacji JOIN. Coś takiego:
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
Jeśli masz gwarancję, że (voterID, ElectionID)
jest unikalny, wybór może być prostszy:
SELECT COUNT(1) AS NumVoters
FROM elections e1
JOIN elections e2
ON e2.voterID = e1.voterID
WHERE e1.electionID = 1
AND e2.electionID = 2