2016-01-27 165 views
3

我知道这是Access的限制,但有谁知道一个好的解决方法,可以让我避免重复记录在我的表有30个字段的情况下,我不不想要这30个字段的任何重复组合?MS访问超过10个字段的唯一约束

我基本上是批量加载财务数据,我只想添加记录,如果某个特定项目ID的某些信息在上次加载后发生了变化。当我运行添加新记录的追加查询时,我希望使用约束来阻止插入,但试图找出另一个解决方案。

+0

项目ID是一个外键,因为项目可以在该表上具有其他属性的各种组合(主要也是外键),因此不是唯一的。但是,它出现在桌面上,数据来自Access登台表。 – Scott

回答

3

要只插入非重复的记录,您需要过滤掉在查询中的重复者与WHERE NOT EXISTS子查询,像这样:

INSERT INTO tTgt (project_id, field1, ..., field30) 
SELECT project_id, field1, ..., field30 
FROM tSrc 
WHERE NOT EXISTS (
    SELECT project_id 
    FROM tTgt 
    WHERE tTgt.project_id = tSrc.project_id 
     AND tTgt.field1 = tSrc.field1 
     ... 
     AND tTgt.field30 = tSrc.field30 
    ) 

子查询将是相当漫长的,但到底这与索引必须做的工作是一样的。

+0

谢谢安德烈!这似乎会起作用..我会给它一个镜头。在WHERE NOT EXISTS之后的“SELECT project_id”是否仅仅从目标表中选择project_id字段方面有些任意,或者是否存在特定的原因? – Scott

+0

@斯科特:哈,有问题。最明显的将是'SELECT *',因为我们只是想知道一个记录是否存在。但我认为(但不确定)只选择一个字段(一个id似乎是合适的)会更有效率。 – Andre

+0

好的,是的。我希望Access不会因此而窒息,但我们会看到。通常试图加载在几千条记录,所以会看到..再次感谢! – Scott