在PostgreSQL中缩写列表
我怎样才能缩写一个列表以便在PostgreSQL中缩写列表,sql,postgresql,amazon-redshift,Sql,Postgresql,Amazon Redshift,我怎样才能缩写一个列表以便 WHERE id IN ('8893171511', '8891227609', '8884577292', '886790275X', . . .) 变成 WHERE id IN (name of a group/list) 这个列表真的必须出现在某个地方。从代码可维护和可重用的角度来看,您可以在CTE中表示列表: WITH id_list AS ( SELECT '8893171511' AS id UNION ALL SELECT '88
WHERE id IN ('8893171511',
'8891227609',
'8884577292',
'886790275X',
.
.
.)
变成
WHERE id IN (name of a group/list)
这个列表真的必须出现在某个地方。从代码可维护和可重用的角度来看,您可以在CTE中表示列表:
WITH id_list AS (
SELECT '8893171511' AS id UNION ALL
SELECT '8891227609' UNION ALL
SELECT '8884577292' UNION ALL
SELECT '886790275X'
)
SELECT *
FROM yourTable
WHERE id IN (SELECT id FROM cte);
如果您一直需要这样做,那么也许CTE应该成为数据库中某个真正的表
编辑:根据马的建议,我们可以将CTE整理为以下内容:
WITH id_list (id) AS (
VALUES
('8893171511'),
('8891227609'),
('8884577292'),
('886790275X')
)
如果列表很大,我会创建一个临时表并将列表存储在那里
这样,您就可以
分析
临时表格并获得准确的估计。临时表格和建议的CTE答案就可以了
我只是想介绍另一种方法,如果您使用PGAdmin进行查询(不确定workbench)并以“严格”的方式表示数据,那么这种方法就行了
@你知道如何使用
value
子句并控制列的名称(这样它们就不会变成column1
,column2
,等等)吗?将列表存储在一个表中。它不是专门的pgAdmin,可以简化为:set setting.my_id='{88931715118891227609}代码>然后。。。其中x=any(当前_设置('setting.my_id')::text[])代码>
set setting.my_ids = '8893171511,8891227609';
select current_setting('setting.my_ids');
drop table if exists t;
create table t ( x text);
insert into t select 'some value';
insert into t select '8891227609';
select *
from t
where x = any( string_to_array(current_setting('setting.my_ids'), ',')::text[]);