2016-09-06 4 views
0

これは私の頭を傷つけてしまいます:私は以下の3番目のクエリで正しく機能するためにNOT CONTAINSを取得できません。 1つの一時的なテーブルを別のものに対して)。NOT CONTAINSを使用して2つのテンポラリテーブル間で結果を比較する

この状況の背景は、ビジタートラッキングソフトウェアによってクライアントのためにトラッキングされているウェブサイトページです。

以下の目標は、一連のクライアントに接続されているすべてのウェブサイトドメインを#Domainsの一時表に追加し、#Pages一時表に訪問したすべてのページを埋め込み、結果を比較して表示しますクライアントドメインとして登録されていないページへの訪問を追跡している場合。基本的には、各ClientID(各クライアントの一意の識別子)に対して#Domains.Domain1、#Domains.Domain2、または#Domains.Domain3のいずれかとは異なる#Pagesからすべてを返したいとします。

#Domains 
+--------------------------------------------------------------------------------+ 
| Name  ClientID  Domain1   Domain2   Domain3   | 
+--------------------------------------------------------------------------------+ 
| Example  11111   www.example.com NULL    NULL   | 
| Test  22222   www.test.com  www.new.com  NULL   | 
| Website  33333   www.website.co.uk NULL        | 
+--------------------------------------------------------------------------------+ 

    #Pages 
+----------+--+-----------------------+ 
| ClientID | |  PageLocation  | 
+----------+--+-----------------------+ 
| 11111 | | www.example.com  | 
| 11111 | | www.example.com/about | 
| 11111 | | www.example.com/help | 
| 22222 | | www.test.com   | 
| 22222 | | www.test.com/help  | 
| 22222 | | www.new.com   | 
| 22222 | | www.fake.com   | 
| 33333 | | www.ultra.co.uk  | 
| 33333 | | www.ultra.co.uk/news | 
| 33333 | | www.website.co.uk  | 
+----------+--+-----------------------+ 

そして、何私が戻ることを期待したいことは、次のようになります:(それは、サブクエリにのみ関連だとレコードIDを含めない)

SELECT Name, Domain1, Domain2, Domain3, ClientID, RecordID 
     INTO #Domains 
     FROM Domains 
     WHERE RecordID IN (Subquery that I wont paste here) 

SELECT ClientID, PageLocation 
     INTO #Pages 
     FROM PageLocations 
     WHERE ClientID IN (SELECT ClientID 
          FROM #Domains) 

SELECT * 
     FROM #Pages 
     WHERE NOT CONTAINS (#Pages.PageLocation, #Domains.Domain1, #Domains.Domain2, #Domains.Domain3) AND 
     #Pages.ClientID = #Domains.ClientID 

は、だから私の2つの表は、現在、次のようになり

+----------+--+-----------------+ 
| ClientID | | PageLocation | 
+----------+--+-----------------+ 
| 22222 | | www.fake.com | 
| 33333 | | www.ultra.co.uk | 
+----------+--+-----------------+ 

申し訳ありませんが、基本的には、最終的なクエリで構文解析エラーが発生しているため、正しく使用しているとは思われません。また、絶対に含まれていないとは確信していませんリここで選択してください、どんな助けも大歓迎です!

+0

'contains'は、フルテキストインデックス付き列に対してフルテキスト検索を実行します。一時テーブルが全文索引付けされているかどうかはわかりません。 –

答えて

0

NOT CONTAINSの代わりにNOT INを使用してみましたが、2つのテーブルを結合する必要があります。

+0

いいえ、まだ試していない。私はまっすぐに 'NOT CONTAINS'に行きました。なぜなら、私は一時テーブルの複数の列ではない構文についてはわからなかったからです。私は実際にどちらかの違いが実際には分かっていません! – Konrad

+0

あなたが列を見たくないのを待ってください。 * – Hari

+0

@Konradの代わりに、見たい特定の列を書くのはなぜですか?NOT CONTAINSをNOT INに置き換えてください。 – Stivan

0
SELECT 
    * 
FROM 
    #Pages 
      join #Domains on #Pages.ClientID = #Domains.ClientID 
WHERE 
    #Pages.PageLocation not like #Domains.Domain1 + '%' 
    and #Pages.PageLocation not like #Domains.Domain2 + '%' 
    and #Pages.PageLocation not like #Domains.Domain3 + '%' 
+0

このクエリは実行されません、 '#ドメイン 'は' from'の一部ではありません –

+0

@Aツ参加を忘れました – Stivan

+0

しかし、WHERE句の一部にするのではなくClientIDで#Domainsに参加すると、 。今すぐテストしよう。 編集:いいえ、まだこの照合の競合が発生しており、これは新しいエラーです。 – Konrad

関連する問題