Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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 Postgres在由regexp\u split\u to\u表拆分的列中搜索_Postgresql_Alias_Where - Fatal编程技术网

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'
我必须回答以下问题:

  • Postgres不喜欢
    WHERE
    -子句中的别名。或者有人知道如何做到这一点吗
  • 有没有人有更好的办法来解决给定的问题
  • 谢谢大家,, 我希望我没有错过一些非常明显的东西

    Postgres不喜欢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';