首页 > 解决方案 > SELECT 中包含多个表的不明确列引用“ctid”

问题描述

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

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

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

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

标签: postgresqlvisual-c++mfcodbc

解决方案


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

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

然后,您可以毫无错误地获取连接的表和视图。那么没有“ctid”。


推荐阅读