0

emailinfo(id,email) と keywordinfo(id,keyword) の 2 つのテーブルがあります。emailinfo には 80,000 行が含まれ、keywordinfo には 2000 行が含まれます。

keywordinfo テーブルのキーワードを含まない emailinfo テーブルからのメールが必要です。

複数の行で条件が気に入らない

すべてのキーワードを keywordinfo テーブルに保持しました

ここで、keywordinfo テーブルのキーワードを含まない emailinfo テーブルからすべてのメールを取得する必要があります。

次のようなクエリが必要です。

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

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
于 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 を使用してシナリオを考え出す代わりに、FULL TEXT INDEXING を使用することを検討しましたか?

Pinal Dave には、始めるのに役立つかなり良い紹介があります。

于 2012-05-24T01:06:10.577 に答える