@zxcursed

SELECT если есть в стоблце?

Есть столбец 'index', в нём значения хранятся в виде "1, 2, 3". Как сделать запрос по типу:
value = 1
SELECT * FROM index WHERE value есть в столбце?
Подумывал над WHERE index IN value, но думаю ошибаюсь
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 3
sergey-gornostaev
@sergey-gornostaev Куратор тега PostgreSQL
Седой и строгий
Вам нужно прочитать, почему реляционные базы называются реляционными, и что такое нормальные формы.
Ответ написан
@galaxy
Сделать то, что вам нужно, в Постгресе не проблема, можно даже несколькими способами. Например:
SELECT * FROM table WHERE value = ANY(string_to_array(index, ', ')::int[])

Можно и проиндексировать при необходимости.
Ответ написан
Комментировать
Kwisatz
@Kwisatz
Больше web-приложений, хороших и разных
Довольно просто

create index my_table_index_index on my_schema.my_table using gin (cast(string_to_array(index, ', ') as int[]));

select *
from my_schema.my_table 
where string_to_array(index, ', ')::int[] @> ARRAY [1, 2, 3]::int[];

select *
from my_schema.my_table 
where cast(string_to_array(index, ', ') as int[]) @> cast(string_to_array(:param, ', ') as int[]);


Второй вариант запроса параметризованный и касты немного переделали чтобы не было проблем с параметрами.
param Должен быть строкой вида '1' или '1, 2, 3';

Кстати переделать на хранение массива можно ровно так же как тут строится индекс.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы