无论是否有匹配的Domain
,您都可以使用LEFT OUTER JOIN
来返回全部Links
。
为了确保只返回各一次Links
行,你应该GROUP BY
的Links
列,只返回一个Domain
(使用像MIN()
或MAX()
聚合函数)的情况下,有一个给定Links
行多Domain
匹配。
事情是这样的:
select Links.ShortURL, Links.LongURL, min(Domain.tag)
from Links
left outer join Domain on Links.LongURL like concat('%', Domain.url, '%')
group by Links.ShortURL, Links.LongURL
您现有LIKE
声明将是非常缓慢的,并从指数Links.LongURL
不能受益。你如何存储URL和域名?如果他们有一个一致的前缀,例如所有Links.LongURL
和Domain.url
值与https://
启动,那么你可以在Links.LongURL
添加索引,摆脱了领先的通配符,使查询速度更快,就像这样:
select Links.ShortURL, Links.LongURL, min(Domain.tag)
from Links
left outer join Domain on Links.LongURL like concat(Domain.url, '%')
group by Links.ShortURL, Links.LongURL
鉴于“找不到匹配项应返回null”,您可能需要左连接。 –