SQL满足以下要求

时间:2017-05-15 04:23:29

标签: sql sql-server

我无法构建SQL以获得所需的输出。

表X

Id_X | GroupId | SomeColumn

表R

Id_R | Id_X | GroupId | RColumn

目标是从表R中选择仅具有GroupId值(A,B)且RColumn值为RValue的Id_X

前:

表X

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

2 个答案:

答案 0 :(得分:0)

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'

答案 1 :(得分:0)

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

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')
               )

演示链接:http://rextester.com/EGLOT75874