2010-05-25 89 views
0

我正在嘗試構建一個相當具體的查詢,以根據它們已註冊的主題查找一組user_id。 不幸的是,重構表格是不可能的,所以我必須用我得到的東西去做。查找特定行

與USER_ID單桌和registration_id 我需要找到一個有一個registration_id所有user_ids(4或5),而不是1

每一行是一個單一的user_id/registration_id組合。我的SQL技能並不是最好的,所以我真的很抓我的大腦。任何幫助將不勝感激。

+0

您的標準是混亂給我。如果註冊ID必須是4或5,爲什麼要檢查它是否不是一個? – pro3carp3 2010-05-25 16:05:39

回答

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 2010-05-25 16:13:31

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 2010-05-26 13:42:01