在多个OR条件下连接2个表



我想完成的:我想在url上连接两个表。但其中一个表的url格式与另一个表略有不同。因为它们是两个表之间唯一的公分母,(没有唯一的id来连接)我必须使用通配符来匹配url。

例如,一个表的格式如下:'www.url.com', 'url.com.', 'abc.def.url.com',而另一个表的格式为'url.com'为了匹配,我需要输入

LEFT JOIN t1
ON t1.url = '%.'||t2.url OR t1.url= t2.url||'.' OR etc...

这是正确的处理方法吗?

当您连接url时,您有一个非常严格的约束。Url.com应该匹配Url.com, www.url.com应该匹配Url.com,但www.dummyurl.com不应该匹配www.myurl.com。你最初的问题很好,是解决问题的正确方法。

为避免过度匹配,建议使用

select * from t1 inner join t2
on t1.url like '%.'||t2.url or t1.url = t2.url 

我使用了内连接来避免NULL匹配下面是一个示例

这里假设t2。Url将位于t1的末尾。Uel后一段时间或两者严格匹配。试着运行这个命令,看看是否得到预期的结果

只是一个猜测,你可以使用CONTAINS()吗?

LEFT JOIN t1
ON CONTAINS(t1.url, t2.url)

编辑:嗯,似乎PostGRE不支持CONTAINS。

试试position()函数。如果未找到子字符串,则返回0

ON position(t2.url in t1.url) <> 0

最新更新