2010-05-25 3 views
0

등록한 주제를 기반으로 user_ids 집합을 찾기 위해 다소 구체적인 쿼리를 작성하려고합니다. 불행히도 테이블을 리팩토링 할 수 없으므로 내가 가지고있는 것과 함께 가야합니다.특정 행 찾기

단일 USER_ID 테이블과 을 registration_id 나는의 registration_id있는 모든 user_ids 찾을 필요 (4 또는 5) AND NOT 1

각 행은 하나의 USER_ID/registration_id 조합입니다. SQL 기술이 최고가 아니므로 내 뇌를 정말로 긁어 모으고 있습니다. 어떤 도움이라도 대단히 감사하겠습니다. 아마도

+0

귀하의 기준이 나에게 혼란이다. 등록 ID가 4 또는 5 여야 만하는 경우 왜 등록 아이디가 아닌지 확인하고 있습니까? – pro3carp3

답변

1
SELECT * 
FROM (
     SELECT DISTINCT user_id 
     FROM registrations 
     ) ro 
WHERE user_id IN 
     (
     SELECT user_id 
     FROM registrations ri 
     WHERE ri.registration_id IN (4, 5) 
     ) 
     AND user_id NOT IN 
     (
     SELECT user_id 
     FROM registrations ri 
     WHERE ri.registration_id = 1 
     ) 

대부분의 아마, user_id, registration_idPRIMARY KEY을 . 그렇지 않은 경우 (user_id, registration_id)에 복합 색인을 작성하여 빠르게 처리하십시오.

+0

그건 속임수 야. 나는 결국 아주 가까웠다. 매우 세련된 선택 고유 부품 – TomCDona

0

하지 그것을 할 수있는 최선의 방법 (내 SQL 기술 중 하나없는 최고)하지만, 작업 수행해야 테이블에

SELECT user_id 
FROM table AS t 
WHERE registration_id IN (4, 5) 
    AND NOT EXISTS (SELECT user_id 
        FROM table 
        WHERE user_id = t.user_id 
         AND registration_id = 1); 
0

USER_ID의 중복을 제거하는 또 다른 방법 : 테이블의

SELECT user_id 
     FROM registrations 
     WHERE registration_id IN (4, 5) 
except 
SELECT user_id 
     FROM registrations 
     WHERE registration_id =1 

하나를 사용

select user_id from registrations 
where registration_id <=5 
group by user_id 
having MIN(registration_id)>1 and MAX(registration_id)>= 4 
+0

에 대한 레이아웃을 놓쳤습니다. – TomCDona