我想要完成的事情: 我想在网址上加入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。
答案 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