да. това, което имате, трябва да работи. (Ще трябва да добавите псевдоним към получената таблица, съобщението за грешка, което получавате, трябва да е разбираемо. Лесно за поправяне, просто добавете интервал и буквата c (или каквото име искате) в края на вашата заявка.
Има едно предупреждение относно възможността за дублиране на (VoterID, ElectionID)
кортежи.
Ако имате уникално ограничение за (VoterID, ElectionID), тогава вашата заявка ще работи добре.
Ако нямате уникално ограничение (което не позволява дублиране на (VoterID, ElectionId)
), тогава има потенциал за избирател с два (2) реда за ElectionID 1 и без редове за ElectionID 2... този гласоподавател да бъде включен в преброяването. И гласоподавател, който е гласувал два пъти в ElectionID 1 и само веднъж в ElectionID 2, този гласоподавател ще бъде изключен от преброяването.
Включването на ключовата дума DISTINCT в COUNT ще реши този проблем, напр.
HAVING COUNT(DISTINCT ElectionID) = 2
Бих написал заявката по различен начин, но това, което имате, ще свърши работа.
За да получа броя на VoterID, които са участвали както в ElectionID 1, така и в ElectionID2, за подобрена производителност, бих избягвал да използвам вграден изглед (MySQL го нарича извлечена таблица). Бих искал заявката да използва операция JOIN вместо това. Нещо като това:
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
Ако ви е гарантирано, че (voterID, ElectionID)
е уникален, тогава изборът може да бъде по-прост:
SELECT COUNT(1) AS NumVoters
FROM elections e1
JOIN elections e2
ON e2.voterID = e1.voterID
WHERE e1.electionID = 1
AND e2.electionID = 2