gpt4 book ai didi

sql - 获取连接的逆?

转载 作者:行者123 更新时间:2023-12-02 02:44:57 26 4
gpt4 key购买 nike

我使用的是 SQL Server 2005。我有三个表 - 用户、组和组用户。 GroupUsers 包含多对多关系的两个 PK。

我有一个 View 来获取一个组的所有用户信息,如下所示:

SELECT * FROM GroupUsers JOIN Users ON GroupUsers.UserID = Users.UserId

我想创建此 View 的反面 - 我想要一个未附加到特定组的所有用户的列表。以下查询将完成此操作:

SELECT * FROM Users WHERE UserID NOT IN 
(SELECT UserID FROM GroupUsers WHERE GroupID=@GroupID)

但是我不想指定组,我想知道如何将其转换为一个 View ,该 View 连接 GroupID,然后连接 UsersID 和所有用户信息,但仅限于非附加用户。

我不知道如何做到这一点,也许可以使用 EXCEPT 运算符?

更新:

我认为这是我的解决方案,除非有人想出更好的东西:

SELECT 
G.GroupId,
U.*
FROM
Groups G
CROSS JOIN
Users U
WHERE
U.UserId NOT IN
(
SELECT
UserId
FROM
GroupUsers
WHERE
GroupId=G.GroupId
)

最佳答案

您可以使用左外连接来获取所有用户,然后删除附加了组的任何用户。以下查询将只为您提供没有组的用户列表:

select
u.*
from
users u
left outer join groupusers g on
u.userid = g.userid
where
g.userid is null

如果您想查找不属于特定组的所有用户:

select
u.*
from
users u
left outer join groupusers g on
u.userid = g.userid
and g.groupid = @GroupID
where
g.userid is null

这将排除该特定组中的用户。所有其他用户都将被返回。这是因为 groupid 条件是在 join 子句中完成的,它限制了连接的行,而不是返回,这正是 where 子句的作用.

关于sql - 获取连接的逆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1247361/

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