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”了。
我正在使用 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”了。