2014-09-30 80 views
1

我試圖從一些使用MS Access和SQL表中查詢數據。該查詢涉及大量標準。例如,下面是我目前使用的代碼:定義關係中陳述

SELECT * 
FROM [tblA] 
IN "G:\path\data.mdb" 
WHERE ((([tblA].[var1])="435")) 
     OR ((([tblA].[var1])="3")) 
     OR ((([tblA].[var1])="4")) 
     OR ((([tblA].[var1])="634")) 
     OR ((([tblA].[var1])="234")) 
     OR ((([tblA].[var1])="234")); 

的標準數量可以高達50,他們將不同的每次有人使用此代碼。問題更嚴重,因爲這是需要多次輸入這些標準的較長代碼的一部分。

我不想讓用戶輸入條件,我想創建一個包含這些約束的excel文件作爲主鍵,然後將tblA中的var1設置爲外鍵並引用Excel表中的主鍵。這樣我可以運行:

SELECT * 
FROM [tblA] 
IN "G:\path\data.mdb" 

我只會得到滿足上述所有條件的數據。有人知道如何使用IN語句連接到外部表時創建這些關係嗎?可以使用ALTER TABLE嗎?如果是這樣,那麼在代碼中?

+0

什麼是你要實現的問題這個解決方案是最好的解決方案描述你試圖解決的問題 – Horaciux 2014-10-01 00:05:10

+0

沒有什麼我知道的,就像你在這裏要求的一樣簡單。您可以在(435,3,4,84394)中將您的初始查詢寫爲[tblA]。[var1]。它也可以作爲var1的地方(從其他地方選擇idlist)。有些方法可以使用excel(在數據連接下)將列表上載到訪問中,並將其作爲標準使用,並將結果顯示在excel中。 – Twelfth 2014-10-01 00:07:23

+0

我試圖解決的問題是從多個數據庫對象的大量的標準,其中,所述條件的每個代碼運行時間變化查詢數據。 – 2014-10-01 00:12:33

回答

1

在另一個文件中創建表IN另一個數據庫和電子表格之間的實際關係可能很困難(或不可能),但出於特定目的,它確實沒有必要。如果你的標準是在一個Excel工作表是這樣的...

Excel.png

...那麼你可以只使用一個WHERE var1 IN (SELECT ...)條款,像這樣:

SELECT * 
FROM [tblA] 
IN "C:\Users\Gord\Desktop\data.mdb" 
WHERE 
    var1 IN (
     SELECT CStr(var1) 
     FROM [Excel 8.0;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Users\Gord\Desktop\criteria.xls].[Sheet1$] 
    )