Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PostgreSQL中缩写列表_Sql_Postgresql_Amazon Redshift - Fatal编程技术网

在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[]);