T-SQL - 根据其他相关记录值获取记录列表

时间:2015-09-11 12:17:00

标签: sql sql-server tsql

我正在尝试进行查询并需要一些帮助(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语句中会更好。非常感谢。

1 个答案:

答案 0 :(得分:4)

您可以使用以下查询来识别与冲突类别相关的页面ID:

PageId
------
1
5

这将返回:

NOT IN

现在,只需使用SELECT DISTINCT PageId FROM Categories WHERE PageId NOT IN ( ... above query here ....)

即可获得预期结果
{{1}}

Demo here