SQL Server:获取表中只有某些键的值

时间:2017-11-20 17:51:01

标签: sql sql-server sql-server-2008

要问甚至搜索的难题。这就是我的困境。我需要在一个只有列中某些键的实例的表中获取ID。

示例:

SELECT DISTINCT(myID1) as mainID 
FROM table1 
WHERE myID2 IN (1, 2, 3, 4, 5)

但是,我不想返回任何myID1值(在table1中),它们具有除1,2,3,4,5之外的myID2值(在table1中)。

所以,这是示例表....

id | myID1 | myID2
---+-------+------
1  |  234  | 2
2  |  234  | 3
3  |  235  | 2
4  |  235  | 6

在这种情况下,我只想返回值 234 。 235表格中的myID2值 6

希望这是有道理的。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

你可以使用它。

DECLARE @Temp TABLE (id INT, myID1 INT, myID2 INT)
INSERT INTO @Temp VALUES
(1 , 234 , 2 ),
(2 , 234 , 3 ),
(3 , 235 , 2 ),
(4 , 235 , 6 )

SELECT DISTINCT myID1 as mainID 
FROM @Temp T
WHERE 
 T.myID2 IN (1, 2, 3, 4, 5)
 AND NOT EXISTS ( SELECT * FROM @Temp T1 WHERE T1.myID2 NOT IN (1, 2, 3, 4, 5) AND T.myID1 = T1.myID1)

结果:

mainID
-----------
234

答案 1 :(得分:0)

你可以这样做;

SELECT DISTINCT(myID1) as mainID FROM table1 
WHERE myID2 IN (1,2,3,4,5) and myID1 not in (SELECT DISTINCT(myID1) as mainID FROM table1 
WHERE myID2 NOT IN (1,2,3,4,5))

答案 2 :(得分:0)

您可以使用EXCEPT。一般伪代码的值为EXCEPT,而不是值。

DECLARE @table1 TABLE (id int, myID1 int, myID2 int)

INSERT INTO @table1
VALUES (1, 234, 2), (2, 234, 3), (3, 235, 2), (4, 235, 6)

SELECT DISTINCT(myID1) as mainID 
FROM @table1 
WHERE myID2 IN (1, 2, 3, 4, 5)

EXCEPT

SELECT DISTINCT(myID1) as mainID 
FROM @table1 
WHERE myID2 NOT IN (1, 2, 3, 4, 5)

提供输出:

mainID
234