2014-04-09 3 views
0

나는 projectid 열이 나타내는 프로젝트 지정과 사용자의 고유 한 userid가 들어있는 user_assignment 열을 포함하는 테이블을 가지고 있습니다. 사용자는 프로젝트 ID와 연관된 사용자 할당 테이블에 레코드가있는 경우 프로젝트에 지정됩니다. 내가 프로젝트에 할당 된 많은 사용자가 있기 때문에 특정 사용자가 중복 레코드를 가져 오지 않고 할당되지 않은 모든 프로젝트를 검색 싶습니다.SQL SELECT Q - 레코드 검색

이 예제는 프로젝트 당 하나의 레코드 만 검색하지만 'abc123'사용자가 할당되어 있고 할당되지 않은 프로젝트를 반환합니다. 사용자가 할당되지 않은 프로젝트 ID를 검색해야합니다.

SELECT DISTINCT `propid` 
FROM `user_assignments` 
WHERE `userid` <> 'abc123' 
ORDER BY `propid` ASC 

SELECT DISTINCT `propid` 
FROM `user_assignments` 
WHERE (`userid` <> 'abc123') 
ORDER BY `propid` ASC 

매우 간단한 해결책이 있지만 확실하게 볼 수는 없습니다.

+0

나는 그것이 MySQL이라고 가정합니다. 질문에 명확하게 설명해 주시겠습니까? 다른 SQL 서버마다 다르며 정확한 질문에 대답하고 싶습니다. –

+0

샘플 데이터를 보여줄 수 있습니까? 내 머리 꼭대기에서 질문이 작동하지 않는 이유를 알 수 없습니다. – Andrew

답변

0

나는 다음 쿼리를 필요로한다고 생각합니다.

SELECT DISTINCT `propid` 
FROM `user_assignments` 
WHERE `propid` NOT IN (SELECT `propid` 
        FROM `user_assignments` 
        WHERE `userid` = 'abc123') 
ORDER BY `propid` 

쿼리는 특정 사용자가 연결된 모든 프로젝트를 가져오고 관련되지 않은 프로젝트를 가져옵니다.

편집 : 당신은 또한 다음과 같은

SELECT DISTINCT o.`propid` 
FROM `user_assignments` as o 
WHERE NOT EXISTS (SELECT 1 FROM `user_assignments` as i 
        WHERE `userid` = 'abc123' 
        AND i.`propid` = o.`propid`) 

처럼 뭔가를 시도 할 수 또는 당신이 사용할 수있는 당신을 위해 트릭을 할 아마도 것이

SELECT DISTINCT o.`propid` 
FROM `user_assignments` as o 
    LEFT JOIN `user_assignments` as i 
     ON i.`propid` = o.`propid` AND i.`userid` = 'abc123' 
WHERE i.`propid` IS NULL 
+0

필자는 phpMyAdmin에서 이전 버전을 사용해 보았지만 결코 레코드를 반환하지 않습니다. – 12AX7

0

다음 쿼리를 달성하기 위해 결합합니다.

SELECT DISTINCT `propid` 
FROM `user_assignments` ua1 
WHERE NOT EXISTS 
(SELECT 1 
FROM `user_assignments` ua2 
WHERE ua1.propid = ua2.propid 
AND ua1.`userid` = 'abc123') 
ORDER BY `propid`;