我有这些表:
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 的东西(查询 #1 中的结果也在查询 #2 中),但我不知道该怎么做。
希望大家能够帮助我,非常感谢。
最佳答案
由于我没有足够的声誉来发表评论,所以我将其写为答案。 相交呢? 编辑:这个解决方案不适用于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;
内连接返回两个查询中具有公共(public)列的所有行。我希望这对您有帮助或至少给您一个想法
关于mysql - 在 MySQL 中合并两个查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40367856/