Во-первых, важный совет: не не храните разделенные запятыми строки в столбце в базе данных.Это делает обработку излишне сложнее.Вам лучше подумать о создании отдельной таблицы ключевых слов и иметь внешний ключ в вашей таблице в столбце идентификатора.
Вы можете преобразовать строки в ARRAY и выполнить операцию перекрытия. Но для проверки значения по значению вы могли бынеобходимо UNNEST
для сравнения.
SQL Fiddle
Настройка схемы PostgreSQL 9.6 :
CREATE TABLE t
(id int, keyword varchar(18))
;
INSERT INTO t
(id, keyword)
VALUES
(1, 'java,php'),
(2, 'jquery, javascript'),
(3, 'java'),
(4, 'php,jquery')
;
Запрос 1 :
SELECT id,
string_agg(lang, ',') AS keyword
FROM t,
unnest(string_to_array(keyword, ',')) AS k(lang)
WHERE lang = ANY ( string_to_array('php,java,html', ',') )
GROUP BY id
ORDER BY id
Результаты :
| id | keyword |
|----|----------|
| 1 | java,php |
| 3 | java |
| 4 | php |