2016-06-16 147 views
3

我正在嘗試編寫一個查詢,只有當處理代碼不存在時,纔會將插入代碼和處置代碼插入我的表中。我目前有這個,但由於某種原因,它將所有記錄的所有配置都插入我的配置表中。我的目標是擁有一個包含所有獨特配置的配置表。查詢插入重複行

INSERT INTO TexasBexarCountyMisdemeanorDispositions ([DISPOSITION-CODE], [DISPOSITION-DESC]) 
SELECT t1.[DISPOSITION-CODE], t1.[DISPOSITION-DESC] 
FROM TexasBexarCountyMisdemeanorPublicRecords t1 
WHERE t1.[DISPOSITION-CODE] NOT IN (SELECT [DISPOSITION-CODE] FROM TexasBexarCountyMisdemeanorDispositions) 

這段代碼將每個記錄的每個配置插入到我的新表中。因此,我沒有一個有30個處置表的表格,而是有一個與我的記錄表大小相當的表格。假設我有一個已經插入到我的表中的處置代碼619。我希望查詢不要再次插入此處置。

有沒有人有任何有關如何做到這一點的見解?

+0

使用一個唯一的約束,因此您不插入重複的記錄。 –

回答

2

請嘗試此查詢。請注意0​​約束選擇

INSERT INTO 
TexasBexarCountyMisdemeanorDispositions 
(
    [DISPOSITION-CODE], 
    [DISPOSITION-DESC] 
) 
SELECT DISTINCT 
[DISPOSITION-CODE], 
[DISPOSITION-DESC] 
FROM 
TexasBexarCountyMisdemeanorPublicRecords 
WHERE [DISPOSITION-CODE] NOT IN 
(
SELECT 
    DISTINCT [DISPOSITION-CODE] 
FROM 
TexasBexarCountyMisdemeanorDispositions 
) 
+1

這是我準備發佈的答案。要展開:'DISTINCT'在這裏是合適的,因爲如果你在'TexasBexarCountyMisdemeanorDispositions'中有相同代碼的多個副本,那麼它們中的所有*都將滿足查詢中的WHERE條款,所以當然你會得到重複的條目。 –

+0

DUDE !!!你是真正的MVP!謝謝這個查詢插入253行到我的表中,在查詢插入超過100萬之前。感謝您的幫助@DhruvJoshi – Lostaunaum

-2

在TexasBexarCountyMisdemeanorDispositions中創建一個索引以防止處理代碼的重複值。 重複的索引錯誤消息可以切換爲警告消息,並且都很好。 msdn.microsoft.com/en-us/library/ms186869.aspx

+0

創建索引? – BJones

+0

@bjones確實。創建一個索引。 – nicomp

+0

@nicomp所以在我的處置表中添加一個唯一的標識符? – Lostaunaum