有没有像“quot”这样的关键词;仅在“中”;在SQL Server中?
我需要像这样的东西-有没有像“quot”这样的关键词;仅在“中”;在SQL Server中?,sql,sql-server,Sql,Sql Server,我需要像这样的东西- 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之外,我不需要任何其他成员存在的条目
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之外,我不需要任何其他成员存在的条目。您也可以使用OR运算符
Select * from RoomMemberTable where RoomMemberId IN ('RM1','RM3')
Select * from RoomMemberTable where RoomMemberId ='RM1' Or RoomMemberId ='RM3'.
仅当有两个以上的值时才在中使用,我更喜欢或在本例中而不是在中
中的:值的范围
或:在一个或另一个中,没有精确的运算符,您需要应用进一步的逻辑,这取决于您的确切需要,但不清楚。这个问题的术语是。一种方法是排除存在其他文件室成员的文件室:
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')
);
因此在这种情况下,R1
和R2
都将返回notexists子查询中的记录,因此这些记录将被排除,只留下R3
或者,如果您只需要RoomId
,则可以使用groupby
和HAVING
:
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;
在你的例子中,你只想要R3房间?作为单行
R3
或两行R3,RM1
和R3,RM3
?如果这些值中只有一个存在呢?不,在这种情况下不起作用。IN运算符在或条件下工作我需要在和条件下工作的东西。我的意思是只得到那些只包含两个RoomMember“RM1”和“RM3”的房间。如果任何其他成员也可以与这些房间成员比我不需要该记录。