1

MySQL:5.6

我有 2 个表 - 一个有一个包含电子邮件地址的 VARCHAR 列,另一个有一个包含域名的 VARCHAR 列。

电子邮件地址示例:john@yahoo.co.uk 域名示例:yahoo.co.uk

我需要检索属于域表中域的电子邮件地址列表。

我怎样才能最有效地做到这一点?

提前感谢您的任何回复。

4

2 回答 2

1

您应该能够JOIN在两个表上LIKE使用CONCAT

SELECT D.Domain, E.Email
FROM Domains D
   JOIN Emails E ON E.Email LIKE CONCAT('%',D.Domain)

SQL 小提琴演示

于 2013-03-31T02:29:03.327 回答
1

您可以LIKE在此使用。(用于字符串匹配

但是使用的问题LIKE是它不使用列上提供的任何索引。这可能会在具有较小记录的数据库上执行得更好,但在已经包含数千条记录的大型数据库上性能会很差。这样做的原因是因为它会FULL TABLE SCAN在非常慢的表上的每条记录上运行。

SELECT  a.DomainName, b.EmailAdd
FROM    DomainList a
        INNER JOIN EmailList b
          ON b.EmailAdd LIKE CONCAT('%', a.DomainName)

要进一步了解有关联接的更多信息,请访问以下链接:

于 2013-03-31T02:30:10.663 回答