gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:31:47 26 4
gpt4 key购买 nike

我正在尝试进行查询并需要一些帮助 (SQL Server)。

想象一下以下场景:用户正在查看一个网页,其中包含多个相关类别。根据某些规则,如果特定类别已与另一个类别放在一起,则不应显示该页面。

为此我有 2 个表:

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 语句中。非常感谢。

最佳答案

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

SELECT DISTINCT c1.PageId
FROM Categories AS c1
INNER JOIN Rules AS r ON c1.ItemNumber = r.WhenViewingCategoryNumber
INNER JOIN Categories AS c2 ON c1.PageId = c2.PageId
AND r.HideEverythingWithCategoryNumber = c2.ItemNumber

这将返回:

PageId
------
1
5

现在您只需使用NOT IN 即可获得预期的结果:

SELECT DISTINCT PageId
FROM Categories
WHERE PageId NOT IN ( ... above query here ....)

Demo here

关于sql - T-SQL - 根据其他相关记录值获取记录列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32523352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com