1

这个问题特定于libpqxx

给定如下 SQL 语句:

string s = "SELECT a.foo, b.bar FROM tableOne a, tableTwo b WHERE a.X=b.X"

并将其发送到 pqxx 事务:

trans.exec(s.c_str(), s.c_str());

结果字段中的列将具有什么名称?

换句话说,假设选择了 1 行:

pqxx::result::const_iterator row = result.begin();
int foo = row->at(FOO_COLUMN).as<int>();
int bar = row->at(BAR_COLUMN).as<int>();

FOO_COLUMN 和 BAR_COLUMN 应该有什么值?它们会分别是“a.foo”和“b.bar”吗?

如果 SQL 语句使用“as”关键字重命名变量,那么我想列名将是任何“as”设置,对吗?

通常我会尝试使用 SQL 并打印列值,但由于我正在开发软件和数据库本身,所以现在进行该测试并不容易。

谢谢!

4

1 回答 1

1

名称将是foobar。如果它们是查询中的别名,则将返回别名,原始名称将丢失。

结果中的列名从不包括表名。

如果它们被命名为tablename.colname,无论如何它都会是模棱两可的,因为SELECT 1 as "foo.colname"它是有效的并且会产生一个列foo.colname,尽管事实上没有foo表。

识别列所源自的表的方法,当它应用时,调用pqxx::result::column_table(column_number)which 返回oid表的。表的名称不能直接使用,但可以pg_class使用oid.

另请注意,列名在结果集中不必是唯一的。SELECT 1 AS a, 2 AS a是有效的,并产生两个名称完全相同的列。

于 2013-06-08T15:24:32.983 回答