2011-08-30 7 views
1

UserId, ItemId 및 ItemName 열이 포함 된 테이블이 있습니다. 해당 사용자가 특정 사용자의 모든 항목을 가지고있는 경우 일부 사용자의 다른 항목을 가져 오려고합니다. SQL 서버로 어떻게 할 수 있습니까?Sql Server 2008 Query

+2

예제 데이터와 원하는 결과를 제공하거나 구두 설명을 개선하십시오. 특정 사용자가 수행하는 모든 항목이있는 모든 사용자를 찾고 싶습니다. 하지만 그 다음엔? 이 전체 사용자 집합이 특정 사용자가 가지고 있지 않은 추가 항목을 모두 찾고 싶습니까? –

+0

당신은 이것을 의미합니까? :'SELECT ItemId, ItemName From Item WHERE UserId = @ userid' – David

+0

또한 테이블에 'ItemId'와'ItemName'이 모두있는 이유는 무엇입니까? 'ItemId' 만 가지고 있어야하고 이름을 얻기 위해 합류해야합니다. –

답변

4

관계 구분을 사용하여 UserId = 1과 동일한 항목을 모두 소유 한 모든 사용자를 찾을 수 있습니다. Some alternative approaches are discussed here. 그런 다음 EXCEPT을 사용하여 사용자 1의 항목을 빼낼 수 있습니다.

SELECT ItemId 
FROM UserItems U1 
WHERE NOT EXISTS (SELECT * 
        FROM UserItems U2 
        WHERE UserId = 1 
          AND NOT EXISTS (SELECT * 
              FROM UserItems U3 
              WHERE U1.UserId = U3.UserId 
                AND U2.ItemId = U3.ItemId)) 
EXCEPT 
SELECT ItemId 
FROM UserItems 
WHERE UserId = 1 
+0

+1 처음으로 EXCEPT에 대한 사용을 본 적이 있습니다. 재교육 주셔서 감사합니다. –

+0

작동했습니다. 많이 감사합니다. – user811686