如何在with语句中动态生成某个表?

时间:2018-11-03 20:39:51

标签: postgresql

在查询中,我想按具有“ Foo”,“ Bar”,“ Baz”之类的值的列进行排序。我必须以某种方式定义一个订单。我所做的就是创建一个像这样的小型临时表:

n     i
'Foo' 1
'Bar' 2
'Baz' 3

我将原始查询中的表与“ n”列中的表连接起来,然后按“ i”列进行排序。

这有效。但是,我可以创建一个临时表然后使用它来代替创建临时表吗?我知道generate_series,但是我可以使用吗?还是有另一种方法?

2 个答案:

答案 0 :(得分:1)

如果要开单,可以轻松使用WITH语句,如下所示:

WITH mytable AS (
    SELECT 'Foo' AS n, 1 AS i
    UNION SELECT 'Bar', 2
    UNION SELECT 'Baz', 3
)
SELECT *
FROM mytable

答案 1 :(得分:1)

您可以使用VALUES子句:

with temp (n,i) as (
  values 
    ('Foo',1)
    ('Bar',2) 
    ('Baz',3)
)
select *
from temp
order by i;

您实际上并不需要CTE,也可以将VALUES子句放入FROM中:

select *
from (
  values 
    ('Foo',1)
    ('Bar',2) 
    ('Baz',3)
) as temp(n,i);