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

时间:2015-07-28 19:58:09

标签: sql postgresql join

我想要完成的事情: 我想在网址上加入2个表格。但是一个表的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...

这是解决这个问题的正确方法吗?

我正在使用PostgreSQL。

2 个答案:

答案 0 :(得分:1)

在加入网址时,您有一个非常严格的约束。 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匹配 Here's a demo

这假设在一段时间或两者严格匹配之后t2.url将在t1.uel的末尾。尝试运行它,看看你是否得到了预期的结果

答案 1 :(得分:0)

只是一个猜测,你能使用CONTAINS()?

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

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

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

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