这个问题是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());
结果字段中的列名称是什么?
换句话说,假设选择了一行:
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"one_answers"b.bar"吗?
如果SQL语句使用"as"关键字重命名变量,那么我认为列名将是"as"设置的任何名称,是对的吗?
通常我会尝试SQL并打印列值,但由于我正在开发软件和数据库本身,现在做该测试不是很容易。
谢谢!
名称将是foo
和bar
。如果它们是查询中的别名,那么将返回别名,原始名称将丢失。
结果中的列名不包括表名。
如果它们被命名为tablename.colname
,它将是不明确的,因为SELECT 1 as "foo.colname"
是有效的,并且产生一个列foo.colname
,尽管事实上没有foo
表。
标识列来自哪个表的方法是调用pqxx::result::column_table(column_number)
,它返回表的oid
。表名不能直接查询,但可以在pg_class
中通过oid
查询。
还要注意,列名在结果集中不必是唯一的。SELECT 1 AS a, 2 AS a
是有效的,并且产生两个名称完全相同的列。