我有一个投票系统,我正在尝试为 MySQL 编写一个查询,该查询将检测哪些投票已完成,以便可以将电子邮件发送给投票的创建者。当(1)他们的时间用完(已经很容易解决)或(2)当所有选民都投票时,投票就完成了。
有两个表与此相关。第一个表是“votes”,其中描述了每个投票并具有唯一的“vote_id”。第二张表是“票”。在创建投票时,每个参与者都创建了一张票(其中包含一些身份验证信息)。每张票都有一个“vote_id”字段,对应于“votes”表中的字段。所以基本上,当人们投票时,他们相应的票就会从票表中删除。这意味着给定“vote_id”的“tickets”中的行数对应于未投票的人数。
起初我去做这样的事情:
SELECT votes.vote_id
FROM votes, tickets
WHERE votes.vote_id=tickets.vote_id
AND (votes.completion_timestamp < NOW())
HAVING (COUNT(tickets.vote_id) = 0)
但后来我意识到......因为“votes.vote_id=tickets.vote_id”行......我想这意味着没有未完成票的投票将被忽略。我可以想到很多低效的方法来做到这一点,但我想在 MySQL 中有一种方法可以做到这一点?
问题的概括总结:给定两个具有公共字段 F 的表 A 和 B,我如何找到 A 中不存在于 B 中的所有 F?