3

我在尝试使我的查询正常工作时遇到了一些问题。我对 SQL Server 的效率不高。

我有一个表,它有一个用户 ID 列,并且用户 ID 与类型列中的不同值匹配,所以数据看起来像这样

User | Type 
User1 | Soccer 
User1 | Tennis 
User1 | BasketBall 
User2 | Tennis 
User2 | Swimming 
User3 | Soccer 
User3 | Swimming 

我希望能够获取仅属于一种类型 ( Soccer) 但不属于任何其他类型的所有用户。所以他们在数据库中应该只有一种他们属于的类型。

4

4 回答 4

4

尝试HAVING自加入:

SELECT T1.[User] FROM MyTable T1
  JOIN MyTable T2
    ON T1.[User] = T2.[User]
   AND T2.[Type] = 'Soccer'
GROUP BY T1.[User]
HAVING COUNT(T1.[Type]) = 1;

看到这个 SQLFiddle

于 2013-07-05T04:56:16.160 回答
4
SELECT [User] FROM Table1
GROUP BY [User]
HAVING COUNT([Type]) = 1
and max([Type])='Soccer'
and min([Type])='Soccer'

SQL 小提琴

于 2013-07-05T04:58:20.113 回答
1

尝试这个

SELECT [User] FROM Table1 T1
WHERE EXISTS (SELECT T2.[User] FROM Table1 T2 WHERE T2.[User] = T1.[User]
             AND T2.[Type] = 'Soccer')
GROUP BY [User]
HAVING COUNT([User]) = 1
于 2013-07-05T04:58:26.317 回答
1

询问:

SQLFIDDLE示例

SELECT t1.[User] 
FROM [MyTable] t1
WHERE t1.Type = 'Soccer'
AND NOT EXISTS (SELECT 1
                FROM MyTable t2
                WHERE t2.[User] = t1.[User] 
                AND t2.Type != t1.Type)
于 2013-07-05T05:04:06.810 回答