SQL Query用于查找连接表中没有特定组ID的用户

时间:2016-01-04 13:25:09

标签: mysql sql select join

我有一个名为jos_user_usergroup_map的表,它有两列:user_id和group_id

用户可以是多个组的成员,因此在该表中有几行,每行都有组ID,例如

user_id|group_id
62     | 1
62     | 4
62     | 12
108    | 1

我想找到所有没有group_id = 12的user_id,但它让我头疼......

在上面的例子中,我应该只找到user_id = 108

任何想法如何做到这一点? 任何帮助表示赞赏。

由于

3 个答案:

答案 0 :(得分:6)

试试这个:

SELECT DISTINCT A.user_id
FROM jos_user_usergroup_map A 
LEFT OUTER JOIN jos_user_usergroup_map B ON A.user_id = B.user_id AND B.group_id = 12 
WHERE B.user_id IS NULL;

答案 1 :(得分:2)

使用后聚合过滤

SELECT user_id FROM jos_user_usergroup_map 
GROUP BY user_id
HAVING SUM(group_id=12)=0

答案 2 :(得分:0)

我会尝试类似的事情:

SELECT DISTINCT `user_id`
FROM `jos_user_usergroup_map`
WHERE `user_id` NOT IN (
    SELECT `user_id` 
    FROM `jos_user_usergroup_map` 
    WHERE `group_id` = 12
)

或使用exist s(可能比in更快):

SELECT DISTINCT `user_id`
FROM `jos_user_usergroup_map`
WHERE NOT EXISTS (
    SELECT `user_id` 
    FROM `jos_user_usergroup_map` 
    WHERE `group_id` = 12 AND `user_id` = `jos_user_usergroup_map`.`user_id`
)

但请注意,尽管这些解决方案在逻辑上易于理解,但基于JOIN的答案在实践中通常要快得多。