使用子查询返回多行

时间:2012-05-16 12:48:53

标签: sql sql-server sql-server-2005

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

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

我想不喜欢多行的条件

我已将所有关键字保存在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 个答案:

答案 0 :(得分:2)

您的第二个查询略有变化怎么样?

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

答案 1 :(得分:1)

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

建议在emailinfo.email字段上加上索引,以便更快地执行查询。

SELECT * FROM emailinfo 
where not exists (Select 1 from
 keywordinfo where emailinfo.email like '%' + keywordinfo.keyword +'%')

答案 2 :(得分:0)

替代配方消除了类似的情况:

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

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

我还建议您更改表结构,以便每个关键字都在一个单独的行中。那你就不需要那个操作符了。

答案 3 :(得分:-1)

您是否考虑过使用完整文本索引而不是尝试使用LIKE创建场景?

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