提问人:Richard Knop 提问时间:4/11/2013 更新时间:4/28/2023 访问量:75385
选择不带表的硬编码值
Select hardcoded values without table
问:
我需要在不实际连接到任何表的情况下运行选择。我只需要一组预定义的硬编码值来循环:
foo
bar
fooBar
我想遍历这些值。我可以做:
select 'foo', 'bar', 'fooBar';
但这会将其作为一行返回:
?column? | ?column? | ?column?
----------+----------+----------
foo | bar | fooBar
(1 row)
我正在使用 Postgresql。
答:
180赞
Clodoaldo Neto
4/11/2013
#1
select a
from (
values ('foo'), ('bar'), ('fooBar')
) s(a);
http://www.postgresql.org/docs/current/static/queries-values.html
评论
6赞
peschü
12/29/2019
可以写成“AS s(a)”而不是“s(a)”,这样可以更明确地表示“s(a)”为硬编码表命名,其中“a”是列名。
0赞
Lee Goddard
8/9/2022
@peschü - 当我尝试时有效。
2赞
Matheus Felipe
12/1/2022
工作得很好,但是这里到底是什么,为什么它知道如何返回值而不是元组?s
1赞
Algorythm
3/21/2023
@MatheusFelipe 是表名和列名。所以你也可以写。括号 () 不是必需的,但随后列名将获得默认名称 (即 )。s
a
select s.a
(a)
column1
select s.column1
60赞
Vivek S.
5/28/2017
#2
要生成多个色谱柱,
SELECT *
FROM (VALUES ('Foo', 25), ('Bar', 30), ('Baz', 35)) AS t(name, age);
输出
name | age
------+-----
Foo | 25
Bar | 30
Baz | 35
使用 unnest()
将数组扩展到一组行
select unnest(array['foo', 'bar', 'fooBar']);
生成多个色谱柱
SELECT *
FROM unnest(
ARRAY['foo', 'bar', 'fooBar']
,ARRAY[25, 30, 35]
) AS t(name, AGE);
输出:
name | age
-------+-----
foo | 25
bar | 30
fooBar| 35
评论
2赞
Luca
7/11/2018
当只有一个值要取消嵌套时,这很有效,但当必须提供多个值时,很快就会变得不可读,因为您必须在许多不同的取消嵌套中分离值
3赞
Peter Krauss
6/4/2020
最简单、最完整的语法SELECT x, 2 y FROM unnest('{1,2,3}'::int[]) t(x);
0赞
Peter Krauss
6/4/2020
@Luke使用 my illustrated 等,您可以使用 LATERAL JOIN、CROSS JOIN、INTERSECTION 等和 express 数据类型。t(x)
t2(x)
12赞
Solanki Vaibhav
2/24/2021
#3
Postgres SQL:
对于以单行和多列表示形式输出的静态数据,请使用以下查询:
select a,b,c from (values('foo','bar','fooBar')) s(a,b,c);
此 SQL 查询的结果:
评论
0赞
markdsievers
8/26/2022
我不认为这是 OP 所追求的,@Clodoaldo Neto 的答案是这种语法的正确方法。
上一个:如何使XML模式中的元素可选?
评论