2014-09-30 42 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$] 
    )