はい。あなたが持っているものはうまくいくはずです。 (派生テーブルにエイリアスを追加する必要があります。取得するエラーメッセージは自明である必要があります。簡単に修正できます。クエリの最後にスペースと文字c(または任意の名前)を追加するだけです。
(VoterID, ElectionID)
が重複する可能性に関する注意点が1つあります。 タプル。
(VoterID、ElectionID)に一意の制約がある場合、クエリは正常に機能します。
一意の制約がない場合(重複する(VoterID, ElectionId)
は許可されません )の場合、ElectionID 1に2行あり、ElectionID2に行がない有権者の可能性があります...その有権者がカウントに含まれる可能性があります。また、ElectionID 1で2回、ElectionID 2で1回だけ投票した投票者は、カウントから除外されます。
COUNT内にDISTINCTキーワードを含めると、その問題が修正されます。例:
HAVING COUNT(DISTINCT ElectionID) = 2
クエリの書き方は異なりますが、あなたが持っているものは機能します。
ElectionID 1とElectionID2の両方に参加したVoterIDの数を取得するには、パフォーマンスを向上させるために、インラインビューの使用を避けます(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