在PostgreSQL中缩写一个列表

时间:2018-08-20 13:38:11

标签: sql postgresql amazon-redshift

我如何缩写列表以使

WHERE id IN ('8893171511',

'8891227609',
'8884577292',
'886790275X',
.
.
.)

成为

WHERE id IN (name of a group/list) 

3 个答案:

答案 0 :(得分:1)

该列表确实必须出现在某处。从代码的可维护性和可重用性的角度来看,您可以在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可能应该成为数据库中某个地方的真诚表。

编辑:使用Horse的建议,我们可以将CTE整理为以下内容:

WITH id_list (id) AS (
VALUES
    ('8893171511'),
    ('8891227609'),
    ('8884577292'),
    ('886790275X')
)

答案 1 :(得分:0)

如果列表很大,我将创建一个临时表并将列表存储在其中。

这样,您可以ANALYZE临时表并获得准确的估算值。

答案 2 :(得分:0)

建议使用临时表和CTE答案。

只想带来另一种方法,如果您使用PGAdmin进行查询(不确定工作台)并以“严格”的方式表示数据,该方法将有效。

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