5

自从我不得不做任何数据库工作以来已经有一段时间了,所以我不太确定如何问这个问题,我知道我过去做过。
如何从字符串列表中创建一个临时表(不使用 CREATE TEMPORARY TABLE)?所以,如果你有类似的东西:

  • '1', 'a', 'A'
    '2', 'b', 'B'
    '3', 'c', 'C'

  • SELECT  field2 
    FROM    { {'1','a','A'}, {'2','b','B'}, {'3','c','C'} } 
            AS fooarray(field1,field2,field3)
    WHERE   field1 = '2'
    -- should return 'b'
    

提示:类似于...

  • SELECT * FROM unnest(array[...]);
    
4

1 回答 1

13

您根本不需要弄乱数组,您可以使用VALUES就地构建表:

7.7. 值列表

VALUES提供了一种生成“常量表”的方法,该表可以在查询中使用,而无需实际创建和填充磁盘上的表。

另请参阅

所以你可以做这样的事情:

=> select *
   from (
       values ('1', 'a', 'A'),
              ('2', 'b', 'B'),
              ('3', 'c', 'C')
    ) as t(id, c1, c2)
    where id = '2';

 id | c1 | c2 
----+----+----
 2  | b  | B
(1 row)

不要忘记为您的 VALUES 提供一个包含列名 ( t(id, c1, c2)) 的别名,以便所有内容都有名称。

于 2012-06-05T19:01:22.023 回答