【问题标题】:SQL (Access) Not returning correct recordsSQL (Access) 没有返回正确的记录
【发布时间】:2014-04-14 13:12:53
【问题描述】:

对此有疑问:

返回 cp.date_registered 在 01/01/2013 之后未注册的所有 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. 注册日期
  2. 每个人有多个记录。如果满足条件,我只需要每人 1 条记录,我不关心日期。

【问题讨论】:

    标签: sql date ms-access record


    【解决方案1】:

    我会尝试以下方法:

    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 应该得到一条记录(如果我正确理解您的要求:))

    【讨论】:

    • 谢谢,解决了我的第一个问题。每个条件实例我只得到一条记录。但它仍在返回 2013 年 1 月 1 日之后注册的人的记录(因为他们也在此之前注册了)。我现在正在寻找 NOT EXISTS 关键字,如果找到答案,我会更新。
    • cp.date_registered 字段是他们注册的日期吗?
    • @Dan 看起来您已经回答了自己的问题 :) 我第一次确实误读了您的问题,但看起来您找到了自己的答案。
    【解决方案2】:

    知道了。这将从 rm 中返回 cp 上 01/01/2013 之后没有注册日期的记录。

     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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 2015-07-17
      • 2012-10-29
      • 1970-01-01
      相关资源
      最近更新 更多