Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有像“quot”这样的关键词;仅在“中”;在SQL Server中?_Sql_Sql Server - Fatal编程技术网

有没有像“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”的房间。如果任何其他成员也可以与这些房间成员比我不需要该记录。