0

有 2 个表 emailinfo(id,email) 和 keywordinfo(id,keyword)。emailinfo 包含 80,000 行,keywordinfo 包含 2000 行。

我想要来自 emailinfo 表的电子邮件,其中不包含来自 keywordinfo 表的关键字。

我不喜欢多行的条件

我将所有关键字都保存在关键字信息表中

现在我必须从 emailinfo 表中获取所有不包含 keywordinfo 表中任何关键字的电子邮件。

我想要如下查询,

select email 
from emailinfo 
where email not like % (select keyword from keywordinfo)

我试过以下查询

SELECT email 
FROM   emailinfo
       join keywordinfo on email  like '%' + keyword +'%'**

但它没有给我正确的结果,而且速度很慢。

4

4 回答 4

3

您的第二个查询的细微变化如何......?

SELECT Email 
FROM   EmailInfo
LEFT JOIN KeywordInfo ON Email LIKE '%' + Keyword + '%'
WHERE KeywordInfo.ID IS NULL

示例数据:

CREATE TABLE #EmailInfo (ID INT, Email VARCHAR(50))
INSERT INTO #EmailInfo (ID, Email) VALUES (1, 'test@example.com')
INSERT INTO #EmailInfo (ID, Email) VALUES (2, 'someone@sample.com')
INSERT INTO #EmailInfo (ID, Email) VALUES (3, 'testing@sample.com')
INSERT INTO #EmailInfo (ID, Email) VALUES (4, 'blahblah@blah.com')
INSERT INTO #EmailInfo (ID, Email) VALUES (5, 'example@email.com')
INSERT INTO #EmailInfo (ID, Email) VALUES (6, 'another@goodemail.com')

CREATE TABLE #KeywordInfo (ID INT, Keyword VARCHAR(50))
INSERT INTO #KeywordInfo (ID, Keyword) VALUES (1, 'sample')
INSERT INTO #KeywordInfo (ID, Keyword) VALUES (2, 'test')

SELECT Email 
FROM   #EmailInfo EmailInfo
LEFT JOIN #KeywordInfo KeywordInfo ON Email LIKE '%' + Keyword + '%'
WHERE KeywordInfo.ID IS NULL

DROP TABLE #EmailInfo
DROP TABLE #KeywordInfo
于 2012-05-16T18:32:21.523 回答
1

以下查询将返回 emailinfo 表中没有在keywordinfo 表中定义任何关键字的所有记录。

建议在 emailinfo.email 字段上建立索引以加快查询执行速度。

SELECT * FROM emailinfo 
where not exists (Select 1 from
 keywordinfo where emailinfo.email like '%' + keywordinfo.keyword +'%')
于 2012-05-16T12:56:33.473 回答
0

一个替代的公式消除了类似的:

Select
From emailinfo ie
Where not exists (select *
           From  ki
          Where charindex(ki.keyword, ie.email) > 0)

我为格式道歉,我在移动设备上。

我还建议您更改表结构,以便每个关键字位于单独的行中。然后你就不需要 like 运算符了。

于 2012-05-16T13:12:49.327 回答
-1

您是否考虑过使用全文索引,而不是尝试使用 LIKE 提出方案?

Pinal Dave 有一个很好的介绍,可以帮助您入门:http: //blog.sqlauthority.com/2008/09/05/sql-server-creating-full-text-catalog-and-index/

于 2012-05-24T01:06:10.577 回答