为什么有些 SELECT 语句打开 RecordSet,而其他 return "Error 13, Type Mismatch"

Why some SELECT statements open a RecordSet, while others return "Error 13, Type Mismatch"

首先,让我声明这个问题是针对 VBA 在 Access 应用程序中的。现在,这是一个更长查询的子查询,但我想在尝试构建更大的查询之前了解基础知识。

出于某种原因,以下代码行成功打开了一个 DAO.Recordset,我可以循环遍历它,对其执行操作:

Dim testRS As DAO.Recordset testQuery = "SELECT * FROM midsecurity_city INNER JOIN itincity ON midsecurity_city.cityid4security = itincity.city_id;" Set testRS = CurrentDb.OpenRecordset(testQuery)

这是比较 BIGINT 类型的两列,跨越两个不同模式中的两个不同表。

现在,下面还比较了两个不同表中的两个 VARCHAR 类型的列,它们也包含在两个不同的模式中。我包含了所有这些详细信息,因为我是 Access 的新手,并且不确定这些信息是否对我的问题有影响。对于它的价值,我正在研究 Postgres 数据库。

这个查询给了我一个 "Error 13: Type Mismatch" 消息然后取消执行。

Dim testRS As DAO.Recordset testQuery = "SELECT * FROM itincity INNER JOIN itinerary ON itincity.city = itinerary.city;" Set testRS = CurrentDb.OpenRecordset(testQuery)

我的假设是 Access 真的讨厌 JOINS 涉及除两列的 INTEGER 比较之外的任何东西吗?我在这方面接近准确吗?如果是这样,有没有办法绕过这个限制,或者是否有另一种方法可以完全解决这样的问题?任何关于 JOINS 如何在 Access 中工作的教育 material 也将受到赞赏,因为它们似乎不像 运行 pgAdmin 中的查询那样遵循相同的规则。

感谢您的帮助。我已经研究这个问题大约一个星期了。

好吧,"solution" 似乎如我所料。 Access 只是讨厌涉及基于文本的列的 JOINS。作为变通方法,我向似乎最依赖另一个的 table 添加了一个外键 (FK)。此 FK 列指定为类型 "BIGINT"。现在,我使用大量 INNER JOINS(所有这些现在也都使用 bigints)的大量查询可以轻松工作。

但是,我仍然很好奇为什么 Access 会拒绝文本 JOINS... 看起来应该是完全可以接受的table。