2011-06-14 54 views
1

使用MS Access 2010,我有兩個表格,我想通過比較相似的字段(1:1和1:M)在其中之一中找到匹配記錄。如何查找將表中的一個字段與另一個表中的多個字段進行比較的匹配記錄?

表1中,[760Vadim]有四個字段:開本,PID數字1,PID NUMBER2,PID 3號

表2,[no_dupes]有兩個字段:開本,PID

我需要找到所有在[760Vadim]中記錄與[no_dupes]中相似字段具有匹配值的記錄。

比較Folio字段是1:1連接,而比較PID是1:M(1:3),並且它們都需要同時進行比較!

我有這樣的使用加入嘗試和下面的SQL語句:

1)的作品,但只有一次在一個領域!

SELECT [760Vadim].*, no_dupes.PID 
FROM no_dupes INNER JOIN 760Vadim ON no_dupes.PID = [760Vadim].[PID Number1] 
WHERE (((no_dupes.PID) Like [760Vadim].[PID Number1])); 

2.)比較PID與兩個字段,0記錄返回時不起作用...!

SELECT [760Vadim].*, no_dupes.PID 
FROM no_dupes INNER JOIN 760Vadim ON (no_dupes.PID = [760Vadim].[PID Number2]) AND (no_dupes.PID = [760Vadim].[PID Number1]) 
WHERE (((no_dupes.PID) Like [760Vadim].[PID Number1])) OR (((no_dupes.PID) Like [760Vadim].[PID Number2])); 

3)這類作品...但返回重複......和去回到設計視圖,它說無效的運營商由於改變爲OR,所以它不喜歡我的等號(=) ?

SELECT [760Vadim].*, no_dupes.PID 
FROM no_dupes INNER JOIN 760Vadim ON (no_dupes.PID = [760Vadim].[PID Number2]) OR (no_dupes.PID = [760Vadim].[PID Number1]) 
WHERE (((no_dupes.PID) Like [760Vadim].[PID Number1])) OR (((no_dupes.PID) Like [760Vadim].[PID Number2])); 

也試過another forums建議:1。 )作品(我覺得...),但重複了!

SELECT [760Vadim].* 
FROM 760Vadim, no_dupes 
WHERE ((([760Vadim].folio)=[no_dupes].[DATA_SO1])) OR ((([760Vadim].[PID Number1])=[no_dupes].[PID])) OR ((([760Vadim].[PID Number2])=[no_dupes].[PID])) OR ((([760Vadim].[PID Number3])=[no_dupes].[PID])); 

這似乎經歷,如果找到匹配的對開返回一個記錄,並返回另一個記錄(可以是複印件),如果匹配的PID從其他三個領域發現。

a similar question建議使用連接內的CONCAT功能刪除重複項。

我也試過在where語句之後添加:GROUP BY [760Vadim].*;刪除重複但無濟於事,它說不能將所有記錄分組,這就是我所需要的。我是Access新手,但對SQL有一定的瞭解(basics)。

道歉,如果發佈錯誤的堆棧,它可能坐在程序員或數據庫堆棧交換更好嗎?

編輯: 我試過的選項,而不加入爲:

SELECT DISTINCT v.* 
FROM [760Vadim] v 
WHERE 
     EXISTS(SELECT * FROM no_dupes nd 
     WHERE nd.pid LIKE v.[PID Number1] 
      OR nd.pid LIKE v.[PID Number2] 
      OR nd.pid LIKE v.[PID Number3] 
      OR nd.folio LIKE v.[folio]) 

您提供的選項只從760Vadim表返回四列,它希望看到他們。 我也注意到它沒有比較folio字段(該規範在我的漫步中丟失了,對不起)。

我是否正確格式化爲SELECT DISTINCT 760Vadim中的所有列如果在no_dupes中找到匹配項?

當我重新回到SQL /設計視圖,它拋出一個異常錯誤並更改SQL到:

SELECT DISTINCT v.* INTO query_final 
FROM 760Vadim AS v 
WHERE (((Exists (SELECT * FROM no_dupes nd 
     WHERE nd.pid LIKE v.[PID Number1] 
      OR nd.pid LIKE v.[PID Number2] 
      OR nd.pid LIKE v.[PID Number3] 
      OR nd.folio LIKE v.[folio]))<>False)); 

回答

2

你有幾個選項

使用DISTINCT/JOIN

SELECT DISTINCT v.folio, 
       v.[PID Number1], 
       v.[PID Number2], 
       v.[PID Number3] 
FROM [760Vadim] v 
     INNER JOIN no_dupes nd 
     ON nd.pid LIKE v.[PID Number1] 
      OR nd.pid LIKE v.[PID Number2] 
      OR nd.pid LIKE v.[PID Number3] 

使用DISTINCT/EXISTS

SELECT DISTINCT 
     v.folio, 
     v.[PID Number1], 
     v.[PID Number2], 
     v.[PID Number3] 
FROM [760Vadim] v 
WHERE 
     EXISTS(SELECT * FROM no_dupes nd 
     WHERE nd.pid LIKE v.[PID Number1] 
      OR nd.pid LIKE v.[PID Number2] 
      OR nd.pid LIKE v.[PID Number3]) 
+0

我已經編輯了我的原始問題的回覆,感謝迄今的指針。他們肯定會帶領我走向正確的方向! – SaultDon 2011-06-14 21:31:32

相關問題