与IN语句一起定义与Access SQL的关系

时间:2014-09-30 23:52:36

标签: sql excel ms-access

我正在尝试使用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吗?如果是这样,代码中的位置?

1 个答案:

答案 0 :(得分: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$]
    )