Sql 选择一个特定数字范围内的“假”列

Sql 选择一个特定数字范围内的“假”列,sql,postgresql,postgresql-8.4,Sql,Postgresql,Postgresql 8.4,我需要选择表的a信息以及一系列特定的数字,也就是说,对于每个a.id,我要使用PostgreSQL 8.4显示该范围内的每个数字 假设范围是数字123、175和192,这就是我想要的结果: A.id 1231 1751 1921 1232 1752 1922 1233 1753 1923年 我知道我可以通过使用 select range, a.id from a inner join generate_series(1, 100, 1) range on true 但问题是,我不想使用gene

我需要选择表的a信息以及一系列特定的数字,也就是说,对于每个a.id,我要使用PostgreSQL 8.4显示该范围内的每个数字

假设范围是数字123、175和192,这就是我想要的结果:

A.id 1231 1751 1921 1232 1752 1922 1233 1753 1923年

我知道我可以通过使用

select range, a.id
from a
inner join generate_series(1, 100, 1) range on true
但问题是,我不想使用generate_数列,因为我的范围是随机数,还有其他方法吗

也许是这样的:

select range, a.id
from a
where range in (123, 175, 192)
group by range, a.id;
鉴于你的评论:

对于每个a.id,我要显示范围内的每个数字

这就产生了所谓的笛卡尔积。下面是一个使用交叉联接和union all的通用选项:


我知道您希望有一个查询,您可以轻松地使用多个数字列表作为参数。使用数组:

with a(id) as (values (1), (2), (3))

select rng, id
from unnest(array[123, 175, 192]) rng
cross join a;

 rng | id 
-----+----
 123 |  1
 175 |  1
 192 |  1
 123 |  2
 175 |  2
 192 |  2
 123 |  3
 175 |  3
 192 |  3
(9 rows)
虽然我已经接受了一个答案,但我写这篇文章是为了描述我发现的3个有效且优雅的解决方案。遗憾的是,我不知道哪一个表现更好

// This is the one I'm using
select unnest(array[123, 175, 192]), a.id
from a
group by range, a.id

select range, a.id
from a
inner join (values (123), (175), (192)) data(range) on true
group by range, a.id

select range, a.id
from a
inner join unnest(array[123, 175, 192]) range on true
group by range, a.id

我想我现在明白了。所以您有一个名为a的表,其中有一个id列,并且您正试图返回具有这些值的范围?哪个范围应该与值匹配?最后一个查询有5个范围——若表a只有3行,那个么为什么123会以1为例?对于每个a.id,我想显示每个a.id中的每个行数range@sgeddes我刚刚意识到我写了一个错误的例子,现在我已经改正了。在这个例子中,我的范围只有3个数字,但实际上它从3到几千不等,“我很感激你的贡献,但我觉得它不太优雅。”@EdsonHoracioJunior-如果你有一千个随机数,你就得把它们写出来。使用UNIONALL只是一个例子。由于您使用的是postrgesql,一个较短的替代方法是使用值列表:。您仍然需要交叉连接,但至少不必多次编写union…@EdsonHoracioJunior-请参见以下答案:
// This is the one I'm using
select unnest(array[123, 175, 192]), a.id
from a
group by range, a.id

select range, a.id
from a
inner join (values (123), (175), (192)) data(range) on true
group by range, a.id

select range, a.id
from a
inner join unnest(array[123, 175, 192]) range on true
group by range, a.id