选择没有表格的硬编码值

Ric*_*nop 53 postgresql

我需要运行一个选择而不实际连接到任何表.我只需要一个预定义的硬编码值集,我需要循环:

foo
bar
fooBar
Run Code Online (Sandbox Code Playgroud)

我想循环遍历这些价值观.我可以:

select 'foo', 'bar', 'fooBar';
Run Code Online (Sandbox Code Playgroud)

但是这将它作为一行返回:

 ?column? | ?column? | ?column? 
----------+----------+----------
 foo      | bar      | fooBar
(1 row)
Run Code Online (Sandbox Code Playgroud)

我正在使用Postgresql.

Clo*_*eto 83

select a
from (
    values ('foo'), ('bar'), ('fooBar')
) s(a);
Run Code Online (Sandbox Code Playgroud)

http://www.postgresql.org/docs/current/static/queries-values.html

  • 可以编写“AS s(a)”而不是“s(a)”,这使得“s(a)”为硬编码表提供名称更加明确,其中“a”是列名称。 (4认同)
  • 工作得很好,但是这里到底是什么以及为什么它知道如何返回值而不是元组? (2认同)

Viv*_* S. 16

运用 unnest()

将数组扩展为一组行

select unnest(array['foo', 'bar', 'fooBar']);
Run Code Online (Sandbox Code Playgroud)

演示

  • 最简单和完整的语法 `SELECT x, 2 y FROM unnest('{1,2,3}'::int[]) t(x);` (3认同)
  • 当只有一个值要取消嵌套时,这很有效,但当必须提供多个值时,很快就会变得不可读,因为您必须将许多不同的取消嵌套中的值分开 (2认同)

小智 11

Postgres SQL:

对于作为单行和多列表示形式的静态数据输出,请使用以下查询:

select a,b,c from (values('foo','bar','fooBar')) s(a,b,c);
Run Code Online (Sandbox Code Playgroud)

此 SQL 查询的结果:

在此输入图像描述