我正在嘗試構建一個相當具體的查詢,以根據它們已註冊的主題查找一組user_id。 不幸的是,重構表格是不可能的,所以我必須用我得到的東西去做。查找特定行
與USER_ID單桌和registration_id 我需要找到一個有一個registration_id所有user_ids(4或5),而不是1
每一行是一個單一的user_id/registration_id組合。我的SQL技能並不是最好的,所以我真的很抓我的大腦。任何幫助將不勝感激。
我正在嘗試構建一個相當具體的查詢,以根據它們已註冊的主題查找一組user_id。 不幸的是,重構表格是不可能的,所以我必須用我得到的東西去做。查找特定行
與USER_ID單桌和registration_id 我需要找到一個有一個registration_id所有user_ids(4或5),而不是1
每一行是一個單一的user_id/registration_id組合。我的SQL技能並不是最好的,所以我真的很抓我的大腦。任何幫助將不勝感激。
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_id
是PRIMARY KEY
您的表。如果不是,則在(user_id, registration_id)
上創建一個複合索引,以便快速工作。
這就是訣竅。畢竟,我非常親密。錯過了非常優雅的選擇不同部分 – TomCDona 2010-05-25 16:13:31
也許不能做到這一點的最好辦法(我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);
另一種方式與消除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
的佈局。 – TomCDona 2010-05-26 13:42:01
您的標準是混亂給我。如果註冊ID必須是4或5,爲什麼要檢查它是否不是一個? – pro3carp3 2010-05-25 16:05:39