2016-01-27 176 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