只需检查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 年 9 月 2 日更新
drink2 列中有两种语法形式。
形式可以被认为是对称(带斜线)和不对称(带括号)。
您应该将 asymmetric 项转换为 symmetric 项。
可以使用函数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, '()', '/'), ' /', '/'), '/'));