un1t
@un1t

Как упростить запрос в PostgreSQL?

Есть запрос вида:

SELECT id,
       name,
       ts_rank_cd(to_tsvector('russian', name), query)
FROM catalog_product,
     to_tsquery('russian', 'телевизор') query
WHERE to_tsvector('russian', name) @@ query;


Меня смущает, что тут дублируется часть "to_tsvector('russian', name)".
На самом деле это упрощенный пример, в реальном запросе там в этом месте сильно сложнее, что-то вроде
setweight( coalesce( to_tsvector('russian', name),''),'A') || ' ' || 
setweight( coalesce( to_tsvector('russian', array_to_string(items, ' ')),''),'B')


Копипастить такую портянку дважды совсем не хочется.

Если бы была просто таблица, то можно было бы добавить в таблицу поле с посчитанным вектором. В моем случае этого сделать нельзя, т.к. выбираю я не из таблицы, а из другого запроса в котором сджойнены множество таблиц.

Можно обойтись без копипасты?
  • Вопрос задан
  • 309 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы