Mysql 一个表的sql,同一个表有两个外键,导致笛卡尔积

Mysql 一个表的sql,同一个表有两个外键,导致笛卡尔积,mysql,sql,database,oracle,Mysql,Sql,Database,Oracle,我对SQL是相当陌生的,我被这个查询困住了。所以我有一个表,它包含同一个表的两个外键。我需要的结果不会使用联接显示。我在这里创建了一个 虽然在MySQL上,我在Oracle上也有同样的问题 这两个表如下所示: wedding_id|civil_union_side_a|civil_union_side_b|guest_side|guest_name _______________________________________________________________________ 1

我对SQL是相当陌生的,我被这个查询困住了。所以我有一个表,它包含同一个表的两个外键。我需要的结果不会使用联接显示。我在这里创建了一个

虽然在MySQL上,我在Oracle上也有同样的问题

这两个表如下所示:

wedding_id|civil_union_side_a|civil_union_side_b|guest_side|guest_name
_______________________________________________________________________
1         |Smith             |Jones             |Smith     |John
1         |Smith             |Jones             |Smith     |Jill
1         |Smith             |Jones             |Smith     |Mark
1         |Smith             |Jones             |Jones     |Jane
1         |Smith             |Jones             |Jones     |David
1         |Smith             |Jones             |Jones     |Mel
婚礼

wedding_id|civil_union_side_a|civil_union_side_b 
________________________________________________
1         |Smith             |Jones
guest

guest_side|guest_name
_____________________
Smith     |John
Smith     |Jill
Smith     |Mark
Jones     |Jane
Jones     |David
Jones     |Mel
现在我需要的结果应该是这样的:

wedding_id|civil_union_side_a|civil_union_side_b|guest_side|guest_name
_______________________________________________________________________
1         |Smith             |Jones             |Smith     |John
1         |Smith             |Jones             |Smith     |Jill
1         |Smith             |Jones             |Smith     |Mark
1         |Smith             |Jones             |Jones     |Jane
1         |Smith             |Jones             |Jones     |David
1         |Smith             |Jones             |Jones     |Mel
我基本上是通过使用
联合实现的:

select * 
from wedding 
     inner join guest guest_side_a
on wedding.civil_union_side_a = guest_side_a.guest_side 

union all

select * 
    from wedding 
inner join guest guest_side_b
on wedding.civil_union_side_b = guest_side_b.guest_side 
然而,当我尝试连接表时,我得到一个笛卡尔积。以下是我的疑问:

select * 
from wedding wedding
      inner join guest guest_side_a
on wedding.civil_union_side_a = guest_side_a.guest_side
      inner join guest guest_side_b
on wedding.civil_union_side_b = guest_side_b.guest_side;
我得到的结果不正确(9行而不是6行):


有没有一种方法可以通过
连接
而不使用
联合
来获得所需的结果?

虽然通常不建议在
选择
列表中使用
*
,但以下至少应该为您提供一个示例:

SELECT wedding.*, guest.*
FROM guest
RIGHT JOIN wedding
    ON guest.guest_side = civil_union_side_a
    OR guest.guest_side = civil_union_side_b;

您在这里同时使用MySQL和Oracle吗?(不要标记未涉及的产品。)@jarlh正如我在问题中提到的,我在两个数据库上都遇到了这个问题。这是适用于大多数RDBMS的相当通用的sql。