MS Access SQL开关函数
我有几个数据结构相同的表,它们在单独的.accdb文件中填充了大量内容,以解释2GB的限制,并且需要根据表单中的字段从其中一个表中检索信息 经过研究,我得出了以下结论,但似乎行不通MS Access SQL开关函数,sql,ms-access,Sql,Ms Access,我有几个数据结构相同的表,它们在单独的.accdb文件中填充了大量内容,以解释2GB的限制,并且需要根据表单中的字段从其中一个表中检索信息 经过研究,我得出了以下结论,但似乎行不通 SELECT MyNumber, MyName, MyPage, MyDrawing FROM Switch([Forms]![View_Info]![Contract] = "Contract1", "tblContract1", [Forms]![View_Info]![Contract] = "Contract
SELECT MyNumber, MyName, MyPage, MyDrawing
FROM Switch([Forms]![View_Info]![Contract] = "Contract1", "tblContract1", [Forms]![View_Info]![Contract] = "Contract2", "tblContract2")
WHERE (MyNumber = [Forms]![View_Info]![MyNumber])
FROM子句中的语法错误。
在本例中,我只使用了4个字段和2个表,但事实上,我希望检索的每个表中大约有9个表和20个字段
有人能解释一下吗?我很难使用SQL,所以如果这是非常基本的,我很抱歉
提前感谢您,Rafael。您不能从SQL from子句中的函数返回表名。如果表是动态确定的,则必须动态生成SQL命令字符串
Dim tableName As String, sql As String
tableName = Switch(...)
sql = "SELECT ... FROM [" & tableName & "] WHERE ..."
正如@forpas在中所解释的,您可以使用联合查询,但这将始终查询所有表。由于筛选不基于表列,因此筛选将在客户端进行,即在您的应用程序中进行。尝试以下方法:
SELECT MyNumber, MyName, MyPage, MyDrawing
FROM tblContract1
WHERE (MyNumber = [Forms]![View_Info]![MyNumber]) AND [Forms]![View_Info]![Contract] = "Contract1"
UNION
SELECT MyNumber, MyName, MyPage, MyDrawing
FROM tblContract2
WHERE (MyNumber = [Forms]![View_Info]![MyNumber]) AND [Forms]![View_Info]![Contract] = "Contract2"
UNION的每个查询在WHERE子句中都包含以下条件:
[Forms]![View_Info]![Contract] = "Contract?"
SWITCH是一个返回标量值的函数,通常在SELECT子句中使用。这并不是真正的问题。在MS Access中,不允许在引用表中加入和加入函数。顺便说一下,考虑数据库重新设计。即使有MS Access的单个文件限制,也应该执行规范化。有编号的表格,如TBLContract 1、TBLContract 2。。。这不是最佳设置。将所有合同保存在一个数据库中,其他项目保存在其他数据库中,并根据需要进行链接。您会惊讶地发现,很少有业务逻辑无法用它来解决。如果你找到一个例子,请分享!另外,存储效率更高,避免了冗余和复杂的查询,并且您可以更好地一对一、一对多关系地执行引用完整性!从今天开始重新设计。祝你好运@冻糕最终做了重新设计,花了我一段时间,但事情更顺利。谢谢你的提示,我很快就会跪下来:对不起,我有一段时间没有刷新页面了。已删除此部分。现在为驻留在多个数据库中的9个合同表完成此操作!哎哟OP通过重新设计会做得更好。但是这个答案显示了需要单独命名表的复杂查询?我应该把这个问题读得更清楚。我不是那个写完整代码的人。我希望OP知道如何写剩下的。