首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在postgresql中,select attributeName( tablename ) from tablename是什么意思

在postgresql中,select attributeName( tablename ) from tablename是什么意思
EN

Stack Overflow用户
提问于 2021-03-30 02:59:06
回答 2查看 52关注 0票数 2

使用Postgresql时,我有一个不理解的明显奇怪的行为

假设有一个简单的表

代码语言:javascript
复制
create table employee (
    number int primary key,
    surname varchar(20) not null,
    name varchar(20) not null);

这对我来说是很清楚的

代码语言:javascript
复制
select name from employee

但是,我还通过以下命令获得了所有名称

代码语言:javascript
复制
select name(employee) from employee

我不明白最后这句话。

我使用的是PostgreSQL 13和pgadmin4

EN

回答 2

Stack Overflow用户

发布于 2021-03-30 04:30:28

我想用PostgreSQL docs中的这句话来扩展@Abelisto的回答

与组合值相关的另一个特殊语法行为是,我们可以使用函数表示法来提取组合值的字段。解释这一点的简单方法是,符号字段(表)和table.field是可以互换的。例如,这些查询是等效的:

  • c.name inventory_item c WHERE c.price >1000;
  • 选择名称(C) FROM inventory_item c WHERE price(c) > 1000;

..。

函数表示法和字段表示法之间的等价性使得在复合类型上使用函数来实现“计算字段”成为可能。使用上面最后一个查询的应用程序不需要直接知道某些函数不是表的实际列。

票数 2
EN

Stack Overflow用户

发布于 2021-03-30 03:43:23

这只是个假设。

在PostgreSQL中,有两种语法方法可以调用接收行作为参数的函数。例如:

代码语言:javascript
复制
create table t(x int, y int); insert into t values(1, 2);
create function f(a t) returns int language sql as 'select a.x+a.y';
select f(t), t.f from t;
┌───┬───┐
│ f │ f │
├───┼───┤
│ 3 │ 3 │
└───┴───┘

它的实现可能也是为了使列的语法相同:

代码语言:javascript
复制
select f(t), t.f, x(t), t.x from t;
┌───┬───┬───┬───┐
│ f │ f │ x │ x │
├───┼───┼───┼───┤
│ 3 │ 3 │ 1 │ 1 │
└───┴───┴───┴───┘
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66860047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档