gpt4 book ai didi

sql-server - 创建一个可以(包括一些)或(包括除了一些以外的所有)记录的连接

转载 作者:搜寻专家 更新时间:2023-10-30 22:22:35 25 4
gpt4 key购买 nike

考虑以下两个表:

User
- UserID
- UserName

Group
- GroupID
- GroupName

明显的关联是用户将在组中。这本身就是一个简单的多对多连接情况,所以让我们添加第三个表:

UserGroup
- UserID
- GroupID

在这个教科书架构下,我可以通过将新记录插入用户组表来轻松地将特定用户包含在特定组中。在进一步讨论之前,我想指出,我认为这是数据库设计中的最佳情况。

但是,我还希望能够创建默认包含所有用户的组,除非他们以某种方式被特别排除。从逻辑上讲,我将其分解为两种“模式”,其中一个组必须处于其中一种模式:

  • 包含模式:除非特别包含,否则每个用户都被排除在外。
  • 排除模式:除非特别排除,否则每个用户都包括在内。

那么设计这种关系的最佳方式是什么?您可以添加列、添加表,并具有奇特的连接条件和 WHERE 约束。请不要触发或 s'procs。

最佳答案

向组表添加字段,'Mode' - 0=Include,1=Exclude

然后,在进行查询时,“独占”组链接表中的用户将被放入“NOT IN ()”列表或“EXCEPT”子句中;而通常会查询“包容性”组。

参见 http://msdn.microsoft.com/en-us/library/ms188055.aspx EXCEPT 语法/用法。

编辑:哦,有人在我之前发帖...希望这仍然有用!

“独占”组的 SELECT 查询会像这样:

SELECT UserID
FROM Users
EXCEPT
SELECT UserID
FROM UserGroup
WHERE GroupID = X

为了使其更具动态性,只需在构建查询之前确定组模式,如果组模式为“包含”,则将“EXCEPT”替换为“INTERSECT”。

关于sql-server - 创建一个可以(包括一些)或(包括除了一些以外的所有)记录的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1101085/

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