Просто проверить drink1
является ли подстрока drink2
:
select *
from drinks
where drink2 like format('%%%s%%', drink1);
id | drink1 | drink2
----+-----------+----------------------
1 | Water | Agua/Water/Eau
2 | Magnesium | Magnesio (Magnesium)
(2 rows)
Проверьте drink1
строго часть drink2
делится на /
:
select *
from drinks
where drink1 = any(string_to_array(drink2, '/'));
id | drink1 | drink2
----+--------+----------------
1 | Water | Agua/Water/Eau
(1 row)
Проверьте drink2
содержит в скобках drink1
:
select *
from drinks
where drink2 like format('%%(%s)%%', drink1);
id | drink1 | drink2
----+-----------+----------------------
2 | Magnesium | Magnesio (Magnesium)
(1 row)
запросов # 2 и # 3 в одном:
select *
from drinks
where drink1 = any(string_to_array(drink2, '/'))
or drink2 like format('%%(%s)%%', drink1);
id | drink1 | drink2
----+-----------+----------------------
1 | Water | Agua/Water/Eau
2 | Magnesium | Magnesio (Magnesium)
(2 rows)
Обновление 2015-09-02
У вас есть две формы синтаксиса в столбце drink2
. Формы можно рассматривать как симметричные (с косой чертой) и асимметричные (с кронштейнами). Вы должны преобразовать асимметричный элементов в симметричный единиц. Вы можете использовать функции replace()
and translate()
:
select *, replace(translate(drink2, '()', '/'), ' /', '/')
from drinks
id | drink1 | drink2 | replace
----+-----------+----------------------+--------------------
1 | Water | Agua/Water/Eau | Agua/Water/Eau
2 | Magnesium | Magnesio (Magnesium) | Magnesio/Magnesium
(2 rows)
и ваш запрос может выглядеть следующим образом:
select *
from drinks
where drink1 = any(string_to_array(replace(translate(drink2, '()', '/'), ' /', '/'), '/'));
Разве это не просто поиск подстроки? Найдите, есть ли напиток № 1 в напитке №2? – John
Каков ваш ожидаемый результат. – HaveNoDisplayName