SQL查询:给定成员的哪些组不是成员?

时间:2013-02-28 07:14:24

标签: mysql sql

我在MySQL中有三个表,

  1. 群组(密钥:group_id
  2. 成员(关键字:member_id
  3. group_member_relations键:group_id, member_id
  4. 最后一个表包含membersgroups的组合(已加入该组的成员)。

    我一直在努力寻找一种方法来执行单个查询,该查询为我提供了一个不在group_member_relations表中的成员和组的列表。 (基本上我想最终问一个问题“哪个组是给定成员而不是成员”)。我可以在代码中以困难的方式做到这一点但是想知道是否有可能进行单一查询。

    根本不是一个SQL wiz,但在过去的20年中已经使用了很多,主要是基本的东西。这显然超出了我的想象。在过去的几天里做了很多尝试但是,令人尴尬的似乎并没有接近。

    来自sql向导的任何指针..

2 个答案:

答案 0 :(得分:2)

成员不在的群组:

select *
from group
where id not in (
  select group_id 
  from group_member_relations
  where member_id = ?)

答案 1 :(得分:1)

以下查询将列出所有可用组以及每个组中不存在的成员。该查询还将为每个表提供所有列。

SELECT  a.*, b.*
FROM    members a
        CROSS JOIN groups b
        LEFT JOIN group_member_table c
            ON a.memberID = c.memberID AND
                b.groupID = c.groupID
WHERE   c.memberID IS NULL OR     -- actually this condition is already enough
        c.groupID IS NULL