SQL,以满足以下要求

SQL,以满足以下要求,sql,sql-server,Sql,Sql Server,我在构建SQL以获得所需输出时遇到困难 表十 Id_X | GroupId | SomeColumn 1 | A | SomeValue 1 | B | SomeValue 2 | A | SomeValue 2 | B | SomeValue 2 | B | SomeValue 2 | C | SomeValue 表R Id_R | Id_X | GroupId | RColumn 目标是从表R中选择Id_X,该表只包含GroupId值(A,B),而RColumn值为RValu

我在构建SQL以获得所需输出时遇到困难

表十

Id_X | GroupId | SomeColumn
1 | A | SomeValue 
1 | B | SomeValue 
2 | A | SomeValue 
2 | B | SomeValue 
2 | B | SomeValue 
2 | C | SomeValue
表R

Id_R | Id_X | GroupId | RColumn
目标是从表R中选择Id_X,该表只包含GroupId值(A,B),而RColumn值为RValue

例:

表十

Id_X | GroupId | SomeColumn
1 | A | SomeValue 
1 | B | SomeValue 
2 | A | SomeValue 
2 | B | SomeValue 
2 | B | SomeValue 
2 | C | SomeValue
表R

101 | 1 | A | RValue
102 | 2 | A | RValue

SQL应该返回1

如果我理解正确,您的查询应该是

SELECT
    [X].Id_X
FROM
    [R]
    INNER JOIN [X] ON
        [R].Id_X = [X].Id_X
        AND
        [R].GroupId = [X].GroupId
WHERE
    [X].GroupId IN ( 'A', 'B' )
    AND
    [R].RColumn = 'RValue'
DECLARE @TableX AS TABLE
(
   Id_X int, GroupId varchar(10), SomeColumn varchar(20)
)

INSERT INTO @TableX
VALUES
( 1, 'A', 'SomeValue'),
( 1, 'B', 'SomeValue'),
( 2, 'A', 'SomeValue'),
( 2, 'B', 'SomeValue'),
( 2, 'B', 'SomeValue'),
( 2, 'C', 'SomeValue')

DECLARE @TableR AS TABLE
(
   ID_R int, Id_X int, GroupId varchar(10),RColumn varchar(10)
)

INSERT INTO @TableR
VALUES (101,1,'A','RValue'), (102,2,'A','RValue')

SELECT DISTINCT tr.Id_X 
FROM       @TableR tr
      INNER JOIN @TableX tx ON tx.Id_X = tr.Id_X AND tx.GroupId = tr.GroupId
WHERE tr.RColumn = 'RValue'
AND NOT EXISTS (    SELECT 1 FROM @TableX tx2 
                    WHERE   tx2.Id_X = tx.Id_X 
                      AND tx2.GroupId NOT IN ('A','B')
               )
演示链接: