我有这两个表:
data
id |email
_
1 |xxx@gmail.com
2 |yyy@gmial.com
3 |zzzgimail.com
errors
_
error |correct
@gmial.com|@gmail.com
gimail.com|@gmail.com
如何从 data
中选择所有带有电子邮件错误的记录?谢谢。
最佳答案
SELECT d.id, d.email
FROM data d
INNER JOIN errors e ON d.email LIKE '%' + e.error
会这样做,但是在要匹配的值的开头使用通配符执行 LIKE 会阻止使用索引,因此您可能会看到性能不佳。
最佳方法是在数据表上定义一个计算列,即电子邮件字段的 REVERSE 并对其进行索引。这会将上面的查询变成一个 LIKE 条件,最后使用通配符,如下所示:
SELECT d.id, d.email
FROM data d
INNER JOIN errors e ON d.emailreversed LIKE REVERSE(e.error) + '%'
在这种情况下,性能会更好,因为它允许使用索引。
我在博客上写了一篇关于这种方法的完整文章 a while ago here .
关于sql-server - 从另一个表中选择具有子字符串的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4027926/