Поиск Postgres в столбце, разделенном на regexp_split_to_table - PullRequest
5 голосов
/ 29 марта 2011

У меня есть следующая таблица:

cs_id ; cs_values ; cs_desc
---------------------------
     1;    'a,b,c';   'one'
     2;      'd,a';   'two'
     3;      'a,c'; 'three'

Поле "cs_valies" содержит различные значения, разделенные запятыми.Я хотел бы получить все "cs_id" в строках, которые содержат определенное значение в "cs_values".

Я использовал это выражение:

SELECT
   cs_id,
   regexp_split_to_table(cs_values, '* , *') as splitted_value
WHERE
   splitted_value = 'a'

У меня есть вопросы:

  1. Postgres не любит псевдонимы в WHERE -пункте.Или у кого-нибудь есть идеи, как этого добиться?
  2. У кого-нибудь есть идеи для решения данной проблемы?

Спасибо всем, надеюсь, я не упустил что-то чрезвычайно очевидное.

Ответы [ 2 ]

9 голосов
/ 29 марта 2011

Postgres не любит псевдонимы в предложении WHERE. Или есть у кого идея как этого добиться?

SELECT * 
FROM (
   SELECT 
      cs_id,
      regexp_split_to_table(cs_values, '* , *') as splitted_value
) t
WHERE
   splitted_value = 'a'

У кого-нибудь есть идея для решения данной проблемы?

Нормализуйте свою таблицу и поместите «список через запятую» в свою таблицу с помощью. Это классическое соотношение 1: n

2 голосов
/ 04 апреля 2013

У меня была похожая ситуация на моих руках.Вот что я нашел в работе с 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';

Надеюсь, она вам тоже поможет.

...