Mysql 一个表的sql,同一个表有两个外键,导致笛卡尔积
我对SQL是相当陌生的,我被这个查询困住了。所以我有一个表,它包含同一个表的两个外键。我需要的结果不会使用联接显示。我在这里创建了一个 虽然在MySQL上,我在Oracle上也有同样的问题 这两个表如下所示: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
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。