我正在尝试进行查询并需要一些帮助(SQL Server)。
想象一下以下场景:用户正在查看具有多个相关类别的网页。根据一些规则,如果特定类别与另一个类别放在一起,则不应显示该页面。
为此,我有两张桌子:
1)有页面ID和相关类别:
Pk CategoryNumber
--------------------
1 30
1 31
1 45
2 30
3 21
3 26
3 64
4 25
4 12
5 25
5 31
5 30
5 45
2)规则表。第一行表示:当查看具有类别30的页面时,如果还具有45类别,则不应检索该页面。
WhenViewingCategoryNumber HideEverythingWithCategoryNumber
-------------------------------------------------------
30 45
25 31
预期输出:
2
3
4
我花了几个小时左右,我不会去任何地方,所以如果有人可以提供帮助,我将不胜感激。如果可能的话,使用SELECT语句将其直接集成到更大的CTE语句中会更好。非常感谢。
答案 0 :(得分:4)
您可以使用以下查询来识别与冲突类别相关的页面ID:
PageId
------
1
5
这将返回:
NOT IN
现在,只需使用SELECT DISTINCT PageId
FROM Categories
WHERE PageId NOT IN ( ... above query here ....)
:
{{1}}