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



所以这一个让我挠头:我不能得到NOT CONTAINS在我下面的第三个查询工作正确(在那里我试图比较结果集在一个临时表对另一个)。

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

下面的目标是用附属于一组客户端的所有网站域名填充#Domains临时表,用我们跟踪访问的所有页面填充#Pages临时表,然后比较结果,看看我们是否跟踪了未注册为客户端域名的页面的访问。基本上我想从#Pages中返回所有不像#Domains的东西。Domain1 #域。Domain2或#Domains。

每个客户端的唯一标识符。
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绝对是正确的选择在这里,所以任何帮助是非常感谢!

您是否尝试使用NOT IN而不是NOT CONTAINS,您必须连接您的两个表

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 + '%'

最新更新