多表请求中的pqxx列名

时间:2013-06-08 03:58:14

标签: postgresql libpqxx

此问题仅针对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并打印列值,但是当我开发软件和数据库本身时,现在进行测试并不是那么容易。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

结果中的列名永远不会包含表名。

如果它们被命名为tablename.colname,则无论如何它都是不明确的,因为SELECT 1 as "foo.colname"有效并产生列foo.colname,尽管事实上没有foo表。

在应用列时,标识列所源自的表的方法是调用pqxx::result::column_table(column_number),该表返回表的oid。该表的名称无法直接使用,但可以pg_classoid一起查询。

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