mysql - 在 MySQL 中合并两个查询的结果

标签 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 的东西(查询 #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/

相关文章:

PHP 使用 php 日期检查数据库日期字段

mysql - 如何在单个表中存储多个选项?

mysql - 如何在 MySQL 中仅当所选列中有值时才使用 Select 进行插入?

mysql - 使用 except 子句的 SQL

mysql - 没有找到适合 jdbc mysql 的驱动程序?

mysql - 从 Mysql 的一个表中选择另一表中不存在的数据

mysql - 分组标记的数据库实现

php - SQL 使用小于 in 对结果进行排序

php - 搜索时高级 ORDER BY

mysql - GeoIP数据库SQL查询返回多个结果