Postgresql Postgres在由regexp\u split\u to\u表拆分的列中搜索
我有下表:Postgresql Postgres在由regexp\u split\u to\u表拆分的列中搜索,postgresql,alias,where,Postgresql,Alias,Where,我有下表: cs_id ; cs_values ; cs_desc --------------------------- 1; 'a,b,c'; 'one' 2; 'd,a'; 'two' 3; 'a,c'; 'three' 字段“cs_valies”包含不同的逗号分隔值。我想在“cs_值”中包含某个值的行中获取所有“cs_id” 我用了这个表达: SELECT cs_id, regexp_split_to_tabl
cs_id ; cs_values ; cs_desc
---------------------------
1; 'a,b,c'; 'one'
2; 'd,a'; 'two'
3; 'a,c'; 'three'
字段“cs_valies”包含不同的逗号分隔值。我想在“cs_值”中包含某个值的行中获取所有“cs_id”
我用了这个表达:
SELECT
cs_id,
regexp_split_to_table(cs_values, '* , *') as splitted_value
WHERE
splitted_value = 'a'
我必须回答以下问题:
WHERE
-子句中的别名。或者有人知道如何做到这一点吗规范化您的表,并使用将“逗号分隔列表”放入自己的表中。这是一个经典的1:n关系我也遇到过类似的情况。 以下是我发现的与pgsql一起工作的内容:
select a.id, a.name from student as a, (select id, cast(regexp_split_to_table(topics, ',') as text) as topic from student) as b where a.id = b.id and b.topic = 'science';
希望它也能对您有所帮助。您完全正确,如果我对给定的数据有任何影响,那么规范化将是我要做的第一件事。。。但我不知道,从来没有少过。。。你的答案很好,帮助很大。非常感谢!我想知道到底是谁创建了所有这些非规范化模型。每次我偶然发现一个,答案是“这不是我/我们做的,我/我们不能改变它”。非常奇怪,实际上这是一个CRM系统,可以定制。客户机在其中“实现”了某种“逻辑”。该逻辑由一些字段组成,在这些字段中可以存储多个值,并用逗号分隔。虽然存在一些适合的数据类型,但客户滥用纯文本字段来输入多个值。。。。现在根本没有钱去改变数据模型,因为很多东西都依赖于它。。。但是那里有很多钱来建立解决办法。。。这就是我发挥作用的地方。
select a.id, a.name from student as a, (select id, cast(regexp_split_to_table(topics, ',') as text) as topic from student) as b where a.id = b.id and b.topic = 'science';