PostgreSQL имеет arrays и array functions, которые позволяют вам решить эту проблему аккуратно.
Предположим следующую схему и образец данных:
CREATE TABLE company
("name" varchar(13), "categories" varchar(9));
INSERT INTO company
("name", "categories")
VALUES
('acme', '1,2,3,4,5'),
('abc', '2,3,4'),
('xyz', '3,5'),
('stackoverflow', '4');
Затем вы можете использовать любой оператор, чтобы найти элемент в массиве, как так:
SELECT
name
FROM (
SELECT NAME, string_to_array(categories, ',') AS category_array FROM company
) n
WHERE
'2' = ANY (category_array);
Который должен вернуться acme
и abc
, согласно this SQLFiddle.
Предполагая, что это поле персонажа, вы можете использовать оператор [LIKE] (http://www.w3schools.com/sql/sql_like.asp): 'где как '%, 1,%''. –
Andrew
Можете ли вы изменить структуру таблицы так, чтобы она имела строку для каждой категории? – Lamak
@Lamak или еще лучше, добавьте новую таблицу, которая имеет строку для каждой связи между компаниями/категориями. –