我想展示一份可以献血的捐献者名单。为此,我正在计算他们的最后一次捐赠日期是否在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/

10-11 02:07