SELECT 中有多个 table 的不明确列引用 "ctid"

Ambiguous column reference "ctid" in SELECT with more than one table

我正在使用 CRecordset 查询一个 table,但我使用第二个 table 来过滤数据。如果在我的 GetDefaultSQL 重写方法中我 return 一个 table 列表包含多个 table 然后我得到这个错误:列引用“ctid”不明确。我知道“ctid”列是什么,但我没有在我的代码中使用它。它由 ODBC 驱动程序插入到原始 SQL 语句中。如何解决这个问题?如何告诉 ODBC 驱动程序不要插入“ctid”列?

我尝试使用 readOnly 参数调用 CRecordset::Open,因为我假设 ODBC 需要 ctid 来更新行,而我不需要更新它们。但是错误依然存在。

还尝试向缺少它的第二个 table 添加一个主键,认为如果 table 有一个主键,那么 ODBC 可以使用它而不是 'ctid',但又没有运气。虽然有道理,因为我没有获取第二个 table 的任何列,第二个 table 仅用于过滤。

如果我创建一个数据库视图来解决这个问题,我会得到错误:“ctid”列不存在。

您必须调用 CRecordset::Open 并更改两个参数:

m_pSet->Open(CRecordset::snapshot, NULL, CRecordset::readOnly);

然后您就可以无误地获取连接表和视图。那就没有“ctid”了。