MySQL:5.6如何檢索VARCHAR列在另一個VARCHAR列上有部分匹配的表A中的行。在表B中?
我有2個表 - 其中一個具有包含電子郵件地址的VARCHAR列,另一個具有帶域名的VARCHAR列。
樣品的email地址:[email protected] 樣品域名:yahoo.co.uk
我需要找回屬於是在域表中域名的電子郵件地址列表中。
我怎樣才能最有效地做到這一點?
在此先感謝您的回覆。
MySQL:5.6如何檢索VARCHAR列在另一個VARCHAR列上有部分匹配的表A中的行。在表B中?
我有2個表 - 其中一個具有包含電子郵件地址的VARCHAR列,另一個具有帶域名的VARCHAR列。
樣品的email地址:[email protected] 樣品域名:yahoo.co.uk
我需要找回屬於是在域表中域名的電子郵件地址列表中。
我怎樣才能最有效地做到這一點?
在此先感謝您的回覆。
您可以使用此LIKE
。 (用於字符串匹配)
但是使用LIKE
的問題是它不使用列上提供的任何索引。對於數據庫較小的記錄,這可能會表現更好,但對於已經包含數千條記錄的大型數據庫,性能會很差。原因是因爲它會執行FULL TABLE SCAN
,該表運行在非常緩慢的表上的每個記錄上。
SELECT a.DomainName, b.EmailAdd
FROM DomainList a
INNER JOIN EmailList b
ON b.EmailAdd LIKE CONCAT('%', a.DomainName)
爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:
你應該能夠JOIN
這兩個表,並使用LIKE
與CONCAT
:
SELECT D.Domain, E.Email
FROM Domains D
JOIN Emails E ON E.Email LIKE CONCAT('%',D.Domain)
其相同的答案JW發佈,但是因爲他添加了有關演出的解釋d擁有,我會接受他的回答。 –