首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >附加到另一个表中,避免重复。

附加到另一个表中,避免重复。
EN

Stack Overflow用户
提问于 2013-11-07 14:02:28
回答 1查看 7.9K关注 0票数 2

我试图查询一个表并将结果附加到另一个表中。我试图创建的查询需要表中的两个字段:

代码语言:javascript
复制
[TblCaseListing]
CaseNumber (text field describing an internal case number)
NextRenewalDate (date/time field describing the next due date for renewing the case)

从本质上说,这个表列出了所有可能的案例,以及案例号可以被最后更新的日期。我正在创建的过程如下所示:

  1. 案件被询问并附上90天前的NextRenewalDate (dest )。tblCaseNumberQueue)
  2. 案件由用户处理
  3. 如果项目完成,TblCaseListing.NextRenewalDate将更新到下一年。

现在,我的查询如下:

代码语言:javascript
复制
Field: CaseNumber
Criteria: Not In (SELECT DISTINCT CaseNumber FROM tblCaseNumberQueue) 'problem is here

Field: NextRenewalDate
Criteria: <=DateAdd("d",90,Date()) 'detect and append from 90 days

不过,这是不对的。因为使用表单和更新数据的用户会年复一年地改变NextRenewalDate。我想在90天内追加,只要更新日期和案件号加在一起还不存在于目标表中。对我的这个查询是“如果今天的日期在90天内,并且大小写不在目标表中”。应该说:“如果NextRenewalDate在90天内没有在目标表中加上下一次更新日期,那么需要修改什么才能根据这两个字段追加?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-07 15:20:49

在我看来,你可以用两种方法之一来处理这件事。您感兴趣的一组案例很容易定义。

代码语言:javascript
复制
SELECT CaseNumber, NextRenewalDate
FROM TblCaseListing
WHERE NextRenewalDate <= DateAdd("d", 90, Date())

您的第一个选项是使用NOT存在来检查已插入的情况下的目标表。

代码语言:javascript
复制
INSERT INTO tblCaseNumberQueue (CaseNumber, NextRenewalDate)
SELECT CaseNumber, NextRenewalDate
FROM TblCaseListing
WHERE NextRenewalDate <= DateAdd("d", 90, Date())
    AND NOT EXISTS
        (
            SELECT * FROM tblCaseNumberQueue
            WHERE tblCaseNumberQueue.CaseNumber = TblCaseListing.CaseNumber
                AND tblCaseNumberQueue.NextRenewalDate = TblCaseListing.NextRenewalDate
        )

然而,有些人不赞成使用不存在,因为它不是很有效。

另一种选择是在tblCaseNumberQueue中创建唯一的索引。

代码语言:javascript
复制
CREATE UNIQUE INDEX UX_CaseDate ON tblCaseNumberQueue (CaseNumber, NextRenewalDate)

然后,只需在不存在检查的情况下进行插入,并让唯一索引不允许已经存在的行。

代码语言:javascript
复制
INSERT INTO tblCaseNumberQueue (CaseNumber, NextRenewalDate)
SELECT CaseNumber, NextRenewalDate
FROM TblCaseListing
WHERE NextRenewalDate <= DateAdd("d", 90, Date())

然而,有些人也对这种做法不以为然。他们声称,我们应该始终避免错误,而不是依靠这种机制来进行其他“合法”的行动。

就我个人而言,我可能会选择第一个选项,因为它更明确,并且只有在我认为不存在可能会对性能产生显著影响的情况下,才会选择第二个选项。(但是,我建议在这两种情况下创建唯一的索引,因为您确实希望避免重复,无论您选择哪种方式来避免它们。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19837911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档