mysql - 父表中的两个外键引用同一个子表。如何构造INNER JOIN?

标签 mysql sql join

为简单起见,我将在此处将我的问题描述为理论问题。

假设您有两个表格——MATCHES 和 FIGHTERS。 'Fighters' 有一个战士列表(pk_fighter_id,fighter_name),其中任何两个都可以被安排来互相对战。 “匹配”可能是一个三字段表(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;

之所以在列名上加上别名,只是为了能够区分谁是fighter1和fighter2。

关于mysql - 父表中的两个外键引用同一个子表。如何构造INNER JOIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15597304/

相关文章:

mysql - InnoDB 表的正确索引

php - PHP 中的全局捕获

java - MySQL 的准备语句,以便它会选择包含最高时间戳的行,该列将比给定参数更大?

sql - 忽略 WHERE 过滤器转换为 float 时出错

mysql - 我如何使用连接获取成员计数

mysql - 如何在hibernate中定义复合外键映射?

mysql - 如何在不丢失或更改数据的情况下更改列排序规则?

mySQL 多重连接,结果行为空

mysql - 选择所有连接行都匹配的记录

MySQL。一段时间内未售出的产品