Ja. wat je hebt zou moeten werken. (Je moet een alias toevoegen aan de afgeleide tabel, de foutmelding die je krijgt zou voor zichzelf moeten spreken. Makkelijk op te lossen, voeg gewoon een spatie en de letter c (of welke naam je maar wilt) toe aan het einde van je zoekopdracht.
Er is één waarschuwing met betrekking tot het potentieel voor dubbele (VoterID, ElectionID)
tupels.
Als je een unieke beperking hebt (VoterID, ElectionID), dan werkt je zoekopdracht prima.
Als u geen unieke beperking heeft (waardoor dubbele (VoterID, ElectionId)
), dan is er een mogelijkheid dat een kiezer met twee (2) rijen voor ElectionID 1 en geen rijen voor ElectionID 2... voor die kiezer wordt opgenomen in de telling. En een kiezer die twee keer heeft gestemd in ElectionID 1 en slechts één keer in ElectionID 2, die kiezer wordt uitgesloten van de telling.
Het opnemen van het DISTINCT-zoekwoord in een COUNT zou dat probleem oplossen, bijvoorbeeld
HAVING COUNT(DISTINCT ElectionID) = 2
Ik zou de vraag anders schrijven, maar wat je hebt zal werken.
Om de telling van VoterID te krijgen die heeft deelgenomen aan zowel ElectionID 1 als ElectionID2, voor betere prestaties, zou ik het gebruik van een inline-weergave vermijden (MySQL noemt het een afgeleide tabel). Ik zou de query in plaats daarvan een JOIN-bewerking laten gebruiken. Zoiets als dit:
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
Als u er zeker van bent dat (voterID, ElectionID)
uniek is, dan kan de selectie eenvoudiger zijn:
SELECT COUNT(1) AS NumVoters
FROM elections e1
JOIN elections e2
ON e2.voterID = e1.voterID
WHERE e1.electionID = 1
AND e2.electionID = 2