2014-11-05 53 views
0

我正在考慮切換到使用臨時表和vba。MS Access SQL 3個或更多表的不相等連接

我想這樣做。我有多個表,在這些表中可能有也可能沒有具有一對多或一對一關係的項目的字段。我知道這些關係是什麼(並且會相應地創建多個查詢)。我尋找的是每個其他表格中都不存在的每個值。舉個例子:

假設我們有3個單列表,表1是{x,y,z},表2是{a,x,z},表3是{a,b,x, y,z},結果會是t3(是的,我需要知道錯誤在哪裏)。非常多,我想使用不平等的嚮導,但是需要3個或更多的表格。

我可能想要查找某些但不是所有其他表中存在的項目。如果您想就此發表意見,這將有所幫助,但我認爲這是嚴格的vba領域。

+0

歡迎來到Stack Overflow!一般來說,這裏同意[你不應該在你的帖子中使用問候或稱呼](http://meta.stackoverflow.com/questions/276033/pointless-question-edit/276037#276037)。他們妨礙我們讀者找出真正的問題。這次我爲你編輯了它們。 – 2014-11-05 23:43:44

+0

上次我問了一個關於數據庫投下的問題,因爲我沒有包括一個例子。你可能想在這裏改變它。 – Steve 2018-03-08 23:23:57

回答

0

我認爲這裏面臨的挑戰是你試圖解決的問題的開放性。改變所有表中的列名,表名和唯一性閾值會使其變得更加困難。按照我在下面顯示的方式,我不認爲這是最有效的,查詢方式,但腳本相對容易。以下代碼假定表中的值在每個表中都是唯一的。

有總共3個查詢是:

qry_001_TableValues_ALL

SELECT Table1.MyValue, "Table1" AS Source 
FROM Table1 

UNION 

SELECT Table2.MyValue, "Table2" AS Source 
FROM Table2 

UNION SELECT Table3.MyValue, "Table3" AS Source 
FROM Table3; 

qry_002_TableValues_Unique:

SELECT qry_001_TableValues_ALL.MyValue 
FROM qry_001_TableValues_ALL 
GROUP BY qry_001_TableValues_ALL.MyValue 
HAVING (((Count(qry_001_TableValues_ALL.MyValue))=1)); 

qry_003_TableValues_UniqueWithSource:

SELECT qry_002_TableValues_Unique.MyValue, qry_001_TableValues_ALL.Source 
FROM qry_002_TableValues_Unique INNER JOIN qry_001_TableValues_ALL 
     ON qry_002_TableValues_Unique.MyValue = qry_001_TableValues_ALL.MyValue; 

如果列\表已更改,則第一個表是您需要編寫腳本的表。它正在查看所有表並從指定的字段中創建唯一的值列表。第二個查詢將查找源表格名稱與原始唯一值查詢中所有值爲1的值的後期聚合。這意味着所涉及的所有表中只有一個返回值的實例,並且它再次與原始唯一值列表連接以確定源表是什麼。您可以在此處編寫對HAVING子句的更改腳本,以查看是否有包含該值的x個表。最後一個查詢就是您運行的那個查詢,它提供了您正在查找的值以及它們駐留的位置的最終報告。

希望這是你正在嘗試做的事情。