我想展示一份可以献血的捐献者名单。为此,我正在计算他们的最后一次捐赠日期是否在90天前。我的问题是:
select *
from donar, donation
donar.id=donation.donar_id
and sex='female'
and datediff(curdate(),donation_date) > 120
问题是它完美地显示了捐献者的名字,但是如果捐献者现在献血,它仍然会在列表中显示他的名字,因为他在90天前就有了一个条目。我该怎么解决?
最佳答案
你在你的例子中漏掉了一个where。试一试…你需要从另一个角度看这个查询…根据你在下面的评论,这里有一个简单的方法让男性和女性在不同的日期限制。在没有工会的情况下,你可以在一份声明中这样做,但我认为工会保留了男女不同时代的逻辑。
SELECT * from donor
LEFT JOIN donation ON donor.id=donation.donor_id
AND donation.donation_date > NOW() - INTERVAL 120 day
WHERE donation.donation_id IS NULL
AND donor.sex='female'
UNION
SELECT * from donor
LEFT JOIN donation ON donor.id=donation.donor_id
AND donation.donation_date > NOW() - INTERVAL 90 day
WHERE donation.donation_id IS NULL
AND donor.sex='male'
基本上这个查询是“把捐赠者表中的所有人都给我,包括90天内有捐赠的人的信息,然后只显示那些没有捐赠细节的人(也就是90天内没有捐赠的人)。
关于mysql - 显示90天之前的所有记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13113391/