繁体   English   中英

PostgreSQL libpq:PQNumber和列别名

[英]PostgreSQL libpq: PQNumber and column aliases

在Postgres libpq sql中,有一个函数PQfnumber:返回与给定列名关联的列号。

可以说我有一个选择:

select a.*, b.* from a, b where a.id = b.id

现在,如果我打电话

number = PQfnumber(pgresult, "a.id");

它将返回-1。

正确的方法是致电:

number = PQfnumber(pgresult, "id");

返回a.id的位置。 那么,我将如何调用该函数以获取b.id的列号? 解决它的唯一方法似乎是写一个不同的select:

select a.id as a_id, a.*, b.id as b_id, b.* from a, b where a.id = b.id

number = PQfnumber(pgresult, "b_id");

还有其他解决办法吗?

不,您找到了正确的方法。

当然,如果在内部a.id = b.id中使用a.id = b.id (如示例代码中所示),为什么还要关心正在查看的列? 同样,有充分的理由不让 id列作为每个表的主键。 即使许多表具有单列整数键,如果您始终命名为给定表保留主键的列,也可以JOIN ... USING terser和更有效的语法(如JOIN ... USING )。

如果使用这样的构造:

 number = PQfnumber(pgresult, "a.id"); 

那么您查询的列别名应如下所示:

SELECT a.id AS "a.id", b.* FROM a, b WHERE a.id = b.id;

您的代码中确实有歧义,如果您尝试使用PL / pgSQL语言进行此类查询,则会收到42702: ambiguous_column异常。

我看到了唯一的出路-您应该为查询中所有雄心勃勃的列提供唯一的别名。 实际上,为所有列都提供别名是一个好习惯,我总是这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM