此问题仅针对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并打印列值,但是当我开发软件和数据库本身时,现在进行测试并不是那么容易。
谢谢!
答案 0 :(得分:1)
名称将为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
有效,并生成两列名称完全相同的列。