所以这一个让我挠头:我不能得到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 + '%'