1

我正在尝试显示可以献血的献血者名单。为此,我正在计算他们的最后一次捐赠日期是否在 90 天之前。这是我的查询:

select *
from donar, donation
    donar.id=donation.donar_id
    and sex='female'
    and datediff(curdate(),donation_date) > 120

问题是它完美地显示了捐献者的姓名,但如果捐献者现在献血,它仍然会在列表中显示他的姓名,因为他在 90 天之前有一个先前的条目。我该如何解决这个问题?

4

2 回答 2

3

您在示例中缺少 where 。试一试...您需要从另一个角度查看查询...根据您在下面的评论,这里有一个简单的方法来获取不同日期限制的男性和女性。如果没有 UNION,您可能可以在一个声明中做到这一点,但我认为工会保留了男性和女性不同日子的逻辑。

 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 天内没有捐赠的人)。

于 2012-10-28T21:56:08.043 回答
0
select * from donar 
       left join donation 
                 on ( donar.id=donation.donar_id )
       where (
               ( sex='female' and datediff(curdate(),donation_date) > 120) 
               or 
               ( sex='male' and datediff(curdate(),donation_date) > 90) 
             )
             or donation.id is null;
于 2012-10-28T23:30:46.237 回答