我如何缩写列表以使
WHERE id IN ('8893171511',
'8891227609',
'8884577292',
'886790275X',
.
.
.)
成为
WHERE id IN (name of a group/list)
答案 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[]);