無論是否有匹配的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」,您可能需要左連接。 –