D
—-
всем добрый вечер, очередная головоломка )
как за-семи-джойнить две таблицы (а точнее отфильтровать одну при помощи второй) по совпадению в префиксе.
пока смог только так, но по итогу выпадает с аут оф мемори (видимо arrayExists копирует входной массив на каждую строку в where).
пример
with (
select groupArray(objfilter) from (
select 'lvl1=2,lvl2=3,lvl3=5' as objfilter UNION ALL
select 'lvl1=1,lvl2=3,lvl3=5,lvl4=43' as objfilter
)
) as fltArr
select fltArr, * from
(
select 'lvl1=2,lvl2=3,lvl3=5' as objpath UNION ALL
select 'lvl1=2,lvl2=3,lvl3=5,lvl4=2' as objpath UNION ALL
select 'lvl1=2,lvl2=3,lvl3=5,lvl4=44' as objpath UNION ALL
select 'lvl1=3,lvl2=3,lvl3=6' as objpath UNION ALL
select 'lvl1=2,lvl2=3' as objpath UNION ALL
select 'lvl1=1,lvl2=3,lvl3=5' as objpath
) t
WHERE arrayExists(
selectedObj ->
(startsWith(objpath, selectedObj)
or startsWith(selectedObj, objpath)),
fltArr);