2010-08-25 161 views
0

對不起,我錯過了,並再次刪除了以前的事故問題。sql query distinct join

我有一種情況,我試圖從表1中選擇不同的值,它們是新的,並將它們存儲在表2中。問題是該表具有列「name」上的重複項,但它確實有一個鍵列「id 「,但是當然映射到同一個名字的不同id。

我在查詢想法是

INSERT INTO TABLE2 
(NAME, UniqueID) 
    SELECT DISTINCT TABLE1.NAME, TABLE1.ID 
    FROM TABLE1 
    LEFT JOIN TABLE2 ON TABLE1.ID=TABLE2.UniqueID 
    WHERE TABLE2.NAME IS NULL 

需要幫助的獲取查詢返回我想要的結果,現在它仍然產生重複表2中(在名稱列),這是我不希望。即使我多次運行查詢,我也希望它只追加新記錄。例如,如果兩個新記錄被添加到table1中,但其中一個名稱已經在表2中,那麼查詢只會向table2添加一條新記錄。

只是一個提示:我使用ms訪問,所以它具有嚴格的語法單查詢

編輯:

Folliwing輸入我來到這個查詢

INSERT INTO TABLE2 
(NAME, UniqueID) 
    SELECT TABLE1.NAME, Min(TABLE1.ID) 
    FROM TABLE1 
    LEFT JOIN TABLE2 ON TABLE1.NAME=TABLE2.NAME 
    WHERE TABLE2.UniqueID IS NULL 
    Group By TABLE1.NAME; 

但這些人真的在訪問不運行要分開到兩個獨立的wueries一個儲蓄者錯誤標誌,但現在我遇到了額外的問題。當我運行兩個單獨的查詢時,它第一次運行良好,但是當我運行兩次嘗試測試以查看是否有任何新記錄已添加到表1時,它會在表1中沒有新記錄時追加1條記錄,所以它會附加一個空白名稱值和一個重複的唯一ID,並且每次運行它時都會繼續執行相同的過程。

+1

爲什麼你不斷刪除你的問題? – RedFilter 2010-08-25 13:47:29

+0

起初它是一個意外 – Jake 2010-08-25 14:03:23

+2

所以現在它的故意 – JeffO 2010-08-25 15:41:15

回答

1

由於您要同時提取姓名和ID,因此distinct關鍵字只會拉取這些不同的組合。兩個具有相同名稱和不同ID的記錄仍然有效。

在不同ID的兩個名字的情況下,你想插入?這...

insert into table2 (Name, UniqueID) 
select t1.Name, MIN(t1.ID) 
from table1 t1 
left join table2 t2 on t1.ID = t2.UniqueID 
where t2.Name is null 
group by t1.Name 

響應意見,我意識到Name字段是什麼應該被加入了,到防止已經存在的騙局。

insert into table2 (Name, UniqueID) 
select t1.Name, MIN(t1.ID) 
from table1 t1 
left join table2 t2 on t1.Name = t2.Name 
where t2.UniqueID is null 
group by t1.Name 
+0

這是行不通的,這是我的確切查詢,除了它使用id字段上的min函數 – Jake 2010-08-25 13:50:39

+0

請參閱新的查詢添加..這是應該加入的名稱,因爲它似乎已經有了現有的記錄。 – Fosco 2010-08-25 13:53:01

+0

這是不同的查詢然後...通過使用Min()和按名稱分組,您將只獲得每個重複名稱1條記錄。 – Fermin 2010-08-25 13:54:09

1
INSERT INTO TABLE2 (UniqueID, NAME) 
SELECT min(t1.ID) as UniqueID, t1.NAME 
FROM TABLE1 t1 
LEFT JOIN TABLE2 t2 ON t1.ID=t2.UniqueID 
WHERE t2.NAME IS NULL 
group by t1.NAME 
+0

不錯..你讓我21秒,幾乎相同的查詢。 – Fosco 2010-08-25 13:48:22

+0

這不起作用,這是我的確切查詢,除了它使用ID字段的最小值函數 – Jake 2010-08-25 13:48:58

+0

@Jake:它不一樣,它使用的是「GROUP BY」。 – RedFilter 2010-08-25 13:52:56