所以这个让我挠头:我无法在下面的第三个查询中得到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是绝对的这里是正确的选择,所以非常感谢任何帮助!
答案 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 + '%'