使用NOT CONTAINS比较2个临时表之间的结果

时间:2016-09-06 13:56:46

标签: sql sql-server sql-server-2012

所以这个让我挠头:我无法在下面的第三个查询中得到NOT CONTAINS以正常工作(我试图将一个临时表中的结果集与另一个临时表进行比较)。

这种情况的背景是通过访客跟踪软件为客户跟踪网站页面。

下面的目标是填充#Domains临时表,其中所有网站域都附加到一组客户端,在#Pages临时表中填入我们跟踪访问过的所有页面,然后比较结果以查看是否我们正在跟踪对未注册为客户域的网页的访问。基本上我想从#Pages返回一切,这些#Pages与每个ClientID(每个客户端的唯一标识符)的#Domains.Domain1,#Domains.Domain2或#Domains.Domain3不同。

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

所以我的两个表目前看起来像这样(不包括RecordID,因为它只与子查询相关):

#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     |
+----------+--+-----------------------+

我希望返回的是:

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

很抱歉这很罗嗦,但基本上我在最终查询中遇到了我的NOT CONTAINS的语法错误,所以我不认为我正确使用它,我甚至不确定NOT CONTAINS是绝对的这里是正确的选择,所以非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

您是否尝试使用NOT IN代替NOT CONTAINS,并且必须加入两个表格。

答案 1 :(得分: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 + '%'