加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql – 父表中的两个外键引用相同的子表.如何构建INNER JOIN

发布时间:2021-03-05 03:16:03 所属栏目:MySql教程 来源:网络整理
导读:为简单起见,我会在这里将我的问题描述为理论问题. 想象一下,你有两个表 MATCHES和FIGHTERS. 战士有一个战士列表(pk_fighter_id,战斗机名称),其中任何两个都可以安排互相攻击. 匹配可能是一个三字段表(pk_fight_num,fk_fighter_id1,fk_fighter_id2),它跟踪这

为简单起见,我会在这里将我的问题描述为理论问题.

想象一下,你有两个表 – MATCHES和FIGHTERS. ‘战士’有一个战士列表(pk_fighter_id,战斗机名称),其中任何两个都可以安排互相攻击. ‘匹配’可能是一个三字段表(pk_fight_num,fk_fighter_id1,fk_fighter_id2),它跟踪这些配对. Fighter1和Fighter2是引用Fighters表中条目的外键.

我需要获得所有战斗的清单,以显示谁在战斗谁,即“23123 | Pacquaio | Marquez.”我如何构建我的查询呢?

我想象的是:

select fk_fighter_id1,fk_fighter_id2
from matches
inner join fighters on matches.fk_fighter_id1=fighters.pk_fighter_id
inner join fighters on matches.fk_fighter_id2=fighters.pk_fighter_id;

当我尝试在Access中嘲笑它时,我将它拼凑在一起,但它不起作用:

SELECT matches.match_no,fighters.fighter_name,fighters.fighter_name
FROM fighters 
INNER JOIN matches ON (fighters.fighter_id = matches.fighter2) AND (fighters.fighter_id = matches.fighter1);

那么,有什么想法吗?我只是不知道从哪里开始. 最佳答案 你接近你想要的.您只需要为表以及具有相同名称的投影列定义唯一别名.

select  a.pk_fight_num,b.fighter_name firstFighter,-- <<== needed also
        c.fighter_name secondFighter -- <<== needed also
from    matches a
        inner join fighters b 
            on a.fk_fighter_id1 = b.pk_fighter_id
        inner join fighters c 
            on a.fk_fighter_id2 = c.pk_fighter_id;

在列名称上添加别名的原因只是为了能够识别谁是战斗机1和战斗机2.

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!