обычному like) с другой таблицей.
Обычный JOIN требует строгое сравнение.
А если применить CROSS JOIN, то КХ ругается, что функции сравнения строк (like, match) требуют вторым аргументом константу.
Есть ли какая-нибудь возможность осуществить задуманное?
Пример, на который ругается КХ:
SELECT
id AS InternalId,
name AS Name,
round(cost / 100,2) AS Price,
sum(amt) AS Quantity,
round(sum(tot / 100), 2) AS Sum
FROM
db.goods r,
(select '%text%' as Filter, 1 as CompaignId) as pt
WHERE
date >= today()
AND Name like pt.Filter -- Argument at index 1 for function like must be constant
GROUP BY InternalId, Name, Price
LIMIT 10
если во второй таблице (pt) мало строк, можно их вернуть как массив в with и использовать. иначе вроде никак with (select groupArray(flt) from (/* your filter table */select arrayJoin(['ing1', 'ing3', 'ing4']) as flt)) as fltArr select * from (/* your goods table */select arrayJoin(['String1','String2','String3']) as name) as goods where multiSearchAny(name, fltArr);
А так чтобы в случае как с JOIN каждому 'ing1' фильтру был сопоставлен id уже получается не выйдет сделать?
Обсуждают сегодня