gpt4 book ai didi

sql - SQL Server中有类似 "Only IN"这样的关键字吗?

转载 作者:行者123 更新时间:2023-12-02 21:00:28 24 4
gpt4 key购买 nike

我需要类似的东西 -

Select * from RoomMemberTable where RoomMemberId "ONLY IN" ('RM1','RM3')

我的表结构 -

RoomId  RoomMemberId
R1 RM1
R1 RM2
R1 RM3
R2 Rm1
R2 RM2
R3 RM1
R3 RM3

我需要获取仅包含这些房间成员的行。除了 RM1 和 RM3 之外,我不需要任何其他成员在场的参赛作品。

最佳答案

对此没有确切的运算符,您需要应用进一步的逻辑,这取决于您尚不清楚的确切需求。当前问题的术语是 Relational Division 。一种方法是排除有其他房间成员的房间:

SELECT  *
FROM #T AS t
WHERE NOT EXISTS
( SELECT 1
FROM #T AS t2
WHERE t2.RoomId = t.RoomId
AND t2.RoomMemberId NOT IN ('RM1', 'RM3')
);

所以在这两个 R1R2将返回不存在子查询中的记录,因此这些记录将被排除,仅留下 R3 .

或者,如果您只想 RoomId那么你可以使用GROUP BYHAVING :

SELECT  RoomId
FROM #T
GROUP BY RoomId
HAVING COUNT(CASE WHEN RoomMemberId IN ('RM1', 'RM3') THEN 1 END) = COUNT(1);

我为此使用的测试表和数据是:

IF OBJECT_ID(N'tempdb..#T', 'U') IS NOT NULL DROP TABLE #T;
CREATE TABLE #T (RoomId VARCHAR(2), RoomMemberId VARCHAR(3));
INSERT #T (RoomId, RoomMemberId)
VALUES
('R1', 'RM1'), ('R1', 'RM2'), ('R1', 'RM3'), ('R2', 'Rm1'),
('R2', 'RM2'), ('R3', 'RM1'), ('R3', 'RM3');

这两个示例都适用于给定房间只能有成员 RM1 的逻辑。或RM3 ,他们没有指定他们必须两者。如果您需要这个,那么您需要:

SELECT  RoomId
FROM #T
GROUP BY RoomId
HAVING COUNT(CASE WHEN RoomMemberId IN ('RM1', 'RM3') THEN 1 END) = COUNT(1)
AND COUNT(DISTINCT RoomMemberId) = 2;

关于sql - SQL Server中有类似 "Only IN"这样的关键字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38522437/

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