如何在子字符串匹配上对另一个子字符串执行连接。我似乎只能ilike
搜索其中一个,而不是搜索子字符串。
给出表格:
DIALOG
string
-------------------
Hi, my name is dan
结构
structure
----------
his name is / my name is
hello, my / you are
how are you?
预期输出
string | structure
-------------------------------
Hi, my name is dan | his name is / my name is
尝试:
两个ilike
模糊匹配:
select string, structure from dialog left join structures on ('%' || string || '%' ilike '%' || structure || '%');
两个模糊ilike
与OR
匹配:
select string, structure from dialog left join structures on (string ilike '%' || structure || '%') or (structure ilike '%' || string || '%');
两个输出:
string | structure
-------------------------------
Hi, my name is dan |
答案 0 :(得分:1)
如果结构实际匹配,则可以使用正则表达式:
select string, structure
from dialog d left join
structures s
on string ~ replace(string, ' / ', '|');
当然,这不适用于示例数据,因为字符串实际上并不匹配。
这也表明你的结构实际上应该是一个正则表达式。
答案 1 :(得分:0)
首先执行笛卡尔积,限制WHERE子句,以查看您可以期望的结果类型。
select string, structure from dialog CROSS join structures WHERE string ilike '%' || structure || '%' AND structure ilike '%' || string || '%'
我认为你的左连接尝试与任何事情都不匹配,因为ILIKE语句左侧有通配符。从字面上看,这些是afaik。另外,使用' AND'对于连接:你想要两个谓词都正确的夫妻。交叉连接在这里适合,因为你非常紧密地定义了where子句。
左连接仅用于您希望绝对获得“对话框”的位置,可选择使用“#”结构'连接到它。在这种情况下,请执行“完全加入”,这样您就可以确切地看到匹配的匹配类型。稍后,您可以决定进一步过滤掉所有内容,并将where子句谓词放在合适的join子句中。