SQL(Access)不返回正确的记录

时间:2014-04-14 13:12:54

标签: sql date ms-access record

遇到问题:

  

返回所有在2013年1月1日之后未注册cp.date_registered的rm记录

我一直在努力改变这一点,试图完成工作:

 SELECT rm.fname, rm.lname, rm.dob, rm.dod, cp.date_registered
 FROM rm INNER JOIN cp ON rm.member_id = cp.member_id
 WHERE cp.date_registered <= #01/01/2013#
 AND NOT cp.date_registered  > #01/01/2013#
 AND rm.dod Is Null;

所以基本上我只需要rm记录中的几个字段,其中注册的日期不是在2013年1月1日之后。我认为它很简单,但显然我需要一些帮助。

现在代码返回

  1. 所有记录日期的记录&lt; 2013年1月1日,即使在日期之后注册。我需要排除这些记录。
  2. 每个人的多条记录。如果满足标准,我每人只需要1条记录,我不在乎日期。

2 个答案:

答案 0 :(得分:0)

我会尝试以下方法:

SELECT DISTINCT rm.fname, rm.lname, rm.dob, rm.dod, cp.date_registered
FROM rm INNER JOIN cp ON rm.member_id = cp.member_id
WHERE cp.date_registered <= #01/01/2013#
AND rm.dod Is Null;

使用DISTINCT应该获得一条记录(如果我正确理解您的要求:))

答案 1 :(得分:0)

知道了。这将返回rm中的记录,这些记录在cp。

之后的2013年1月1日之后没有注册日期
 SELECT rm.fname, rm.lname, rm.dob, rm.dod
 FROM rm
 WHERE rm.dod Is Null
 AND NOT EXISTS
    (SELECT cp.date_registered
    FROM cp
    WHERE rm.member_id = cp.member_id
    AND cp.date_registered >= #01/01/2013#);

此外,它每次只会返回一条记录,不需要DISTINCT。