如何在Postgres中创建一个空的匿名表?

7
在Postgres中,如果我想创建一个“匿名表格”(即基于数据而不是数据库的临时查询),我可以使用VALUES,例如:
select * from (values (1, 'Hello world'), (100, 'Another row')) as foo (mycol1, mycol2);

但是我如何创建一个没有行的匿名表格呢?(这是为了一个代码生成器,所以问题并不像听起来那么奇怪!)。以下方法行不通。
select * from (values  ) as foo (mycol1, mycol2);

因为我获取
ERROR:  syntax error at or near ")"
LINE 1: select * from (values  ) as foo (mycol1, mycol2);
                               ^

我知道一个解决方法。
select * from (values (NULL, NULL)) as foo (mycol1, mycol2) where mycol1 is not NULL;

但是是否有更好或“更官方”的方法呢?

(我还想知道是否有可能创建一个没有列的表!)


你的问题不是很清楚... - Denis de Bernardy
你想用“匿名表”做什么?创建这样的表格的能力看起来像是一个错误。 - Ihor Romanchenko
@Denis,我的问题是是否有更好的方法来执行:select * from (values (NULL, NULL)) as foo (mycol1, mycol2) where mycol1 is not NULL - Tom Ellis
@IgorRomanchenko,匿名表是指基于不在数据库中的数据的临时查询,例如从我的第一个select语句返回的查询。 - Tom Ellis
2个回答

5
我认为你可以这样做:

我认为你可以这样做:

select null::text as a, null::int as b
limit 0

1
我喜欢它!到目前为止,这是我最喜欢的答案。语法非常干净。 - Tom Ellis

1
SELECT  *
FROM    generate_series(0, -1)

这确实给了我一个返回零行的查询!但是我能否使它具有任意数量的列和任意类型? - Tom Ellis
@TomEllis 使用 SELECT null :: number,null :: varchar ... FROM generate_series(0,-1) - Ihor Romanchenko
啊,没错,这个可以。为了获取列名,我可以执行 SELECT null::int as foo, null::varchar as bar FROM generate_series(0, -1) - Tom Ellis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接