SQL,以满足以下要求
我在构建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
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')
)
演示链接: