MS Access SQL 切换功能

Posted

技术标签:

【中文标题】MS Access SQL 切换功能【英文标题】:MS Access SQL Switch Function 【发布时间】:2019-06-26 16:22:44 【问题描述】:

我有几个具有相同数据结构的表(它们充满了一堆东西,在单独的 .accdb 文件中以说明 2GB 的限制)并且需要根据一个字段从其中一个中检索信息表格。

经过研究,我想出了以下方法,但它似乎不起作用。

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,所以如果这是非常基本的,我深表歉意。

提前致谢,拉斐尔。

【问题讨论】:

SWITCH() 是一个返回标量值的函数,通常用于SELECT 子句。 这不是真正的问题。在 MS Access 中,FROMJOIN 中不允许引用表的函数。 顺便说一下,考虑重新设计数据库。即使有 MS Access 的单个文件限制,也应该进行规范化。像 tblContract1tblContract2、... 这样的编号表并不是最佳设置。将所有合同保存在一个数据库中,将其他项目保存在其他数据库中,并根据需要进行链接。 您会惊讶于normalization 无法解决的业务逻辑有多少。如果你找到一个例子,请分享!此外,存储效率更高,避免了冗余和复杂查询,您可以更好地运用参照完整性(一对一、一对多关系)!从今天开始重新设计。祝你好运! @Parfait 最终进行了重新设计,花了我一段时间,但事情变得更顺利了。感谢您的提示,我很快就会跪下:p 【参考方案1】:

您不能从 SQL FROM 子句中的函数返回表名。如果您的表是动态确定的,那么您必须动态构建 SQL 命令字符串。

Dim tableName As String, sql As String

tableName = Switch(...)
sql = "SELECT ... FROM [" & tableName & "] WHERE ..."

正如@forpas 在his answer 中解释的那样,您可以使用 UNION 查询,但这将始终查询所有表。由于过滤器不是基于表列,因此过滤将发生在客户端,即在您的应用程序中。

【讨论】:

哦抱歉,我有一段时间没有刷新页面了。删除了这部分。【参考方案2】:

试试这个联合:

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?"

【讨论】:

现在为驻留在多个数据库中的 9 个合同表完成此操作!哎哟... OP 在重新设计方面会做得更好。但是这个答案显示了单独命名表所需的复杂查询。 真的吗,9?我应该更好地阅读这个问题。好吧,我不是编写完整代码的人。我希望 OP 知道如何编写其余部分。

以上是关于MS Access SQL 切换功能的主要内容,如果未能解决你的问题,请参考以下文章

MS Access Sql 查询不是聚合函数的一部分。使用计数功能

使用拼写检查时使用 VBA 切换字典 (MS Access)

MS Access 查询设计在与 SQL Server 的连接上挂起

Access 2013:我可以使用数据宏触发 MS SQL SP 而不延迟 Access 中的执行吗?

MS Access 切换按钮背景

SQL Server 在链接的 MS Access 表上插入后返回不同的记录