我有这些表格:
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),但我不知道如何做到这一点。
我希望你们能帮助我,非常感谢。
答案 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;
内部联接返回两个具有共同列的查询中的所有行。我希望这有助于或至少给你一个想法