结合MySQL

时间:2016-11-01 20:10:09

标签: mysql

我有这些表格:

User(idUser, name...)
Group(idGroup, name, ...)

和关联它们的关联表:

UserIsInGroup(idGroup, idUser...)

我做了一个查询,其中显示了我正在寻找的用户所在的所有群组的ID。

select group.name, group.idGroup from Group
join UserIsInGroup
on group.idGroup = UserIsInGroup.idGroup
where UserIsInGroup.idUser = 1; /*User #1*/ 

select group.name, group.idGroup from Group
join UserIsInGroup
on group.idGroup = UserIsInGroup.idGroup
where UserIsInGroup.idUser = 2; /*User #2*/

显然,两个查询都会带来不同的结果列表,但它们会产生一个我想要的结果。

所以,我想要像select这样的东西(在查询#2中也会出现查询#1),但我不知道如何做到这一点。

我希望你们能帮助我,非常感谢。

1 个答案:

答案 0 :(得分:0)

因为我没有足够的声誉来评论我写这个作为答案。 相交怎么样? 编辑:这个解决方案不适用于MySQL(当我写这个答案时我忘记了)但是,我会留在这里以防万一

    select group.name, group.idGroup from Group
   join UserIsInGroup
   on group.idGroup = UserIsInGroup.idGroup
   where UserIsInGroup.idUser = 1; /*User #1*/ 
    INTERSECTS
   select group.name, group.idGroup from Group
join UserIsInGroup
on group.idGroup = UserIsInGroup.idGroup
where UserIsInGroup.idUser = 2; /*User #2*/

我看到发布此解决方案的回复,但显然已被删除。

替代方案:

你可以使用INNER JOIN替换相交,我测试了它似乎工作: 请注意,您必须为每个选择一个别名,在这种情况下我只使用字母

select distinct * from (select group.name, group.idGroup from Group
join UserIsInGroup
on group.idGroup = UserIsInGroup.idGroup
where UserIsInGroup.idUser = 1; /*User #1*/ ) as a
INNER JOIN
(select group.name, group.idGroup from Group
join UserIsInGroup
on group.idGroup = UserIsInGroup.idGroup
where UserIsInGroup.idUser = 2; /*User #2*/) as b;

内部联接返回两个具有共同列的查询中的所有行。我希望这有助于或至少给你一个想法

相关问题