我正在尝试构建一个相当具体的查询,以根据它们已注册的主题查找一组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