多表请求中的PQXX列名



这个问题是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并打印列值,但由于我正在开发软件和数据库本身,现在做该测试不是很容易。

谢谢!

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

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

如果它们被命名为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是有效的,并且产生两个名称完全相同的列。

相关内容

  • 没有找到相关文章

最新更新