Mysql 引用同一列的两个外键

Mysql 引用同一列的两个外键,mysql,Mysql,我有两张桌子:Livestream和Team Livestream: id_livestream int primary key id_team1 int id_team2 int id_team int primary key name_team varchar(40) image_team varchar(255) //我已经将这两列引用到团队id\u团队列 团队: id_livestream int primary key id_team1 int id_team2 int

我有两张桌子:Livestream和Team

Livestream:

id_livestream int primary key

id_team1 int

id_team2 int
id_team int primary key

name_team varchar(40)

image_team varchar(255)
//我已经将这两列引用到团队id\u团队列

团队:

id_livestream int primary key

id_team1 int

id_team2 int
id_team int primary key

name_team varchar(40)

image_team varchar(255)
我想为Livestream中的两个引用列从team中选择name_team。。 作为示例,我想展示如下内容:


id_team1 | team1的名称| team1的图像| id_team2 | team2的名称| team2的图像

您只需从
Livestream
表到
team
表进行两次连接即可生成所需的输出:

SELECT
    lm.id_team1,
    t1.name_team AS name_team_1,
    t1.image_team AS image_team_1,
    lm.id_team2,
    t2.name_team AS name_team_2,
    t2.image_team AS image_team_2
FROM Livestream lm
INNER JOIN Team t1
    ON lm.id_team1 = t1.id_team
INNER JOIN Team t2
    ON lm.id_team2 = t2.id_team

这里我假设出现在
Livestream
中的每个团队都会在
team
表中的某个地方有一个条目。如果情况并非如此,并且您不希望
NULL
值出现在结果集中,那么您可以切换到使用
左连接
以及
COALESCE()

只需从
Livestream
表到
团队
表进行两次连接即可生成所需的输出:

SELECT
    lm.id_team1,
    t1.name_team AS name_team_1,
    t1.image_team AS image_team_1,
    lm.id_team2,
    t2.name_team AS name_team_2,
    t2.image_team AS image_team_2
FROM Livestream lm
INNER JOIN Team t1
    ON lm.id_team1 = t1.id_team
INNER JOIN Team t2
    ON lm.id_team2 = t2.id_team
这里我假设出现在
Livestream
中的每个团队都会在
team
表中的某个地方有一个条目。如果情况并非如此,并且您不希望结果集中出现
NULL
值,那么您可以切换到使用
左连接
以及
合并()

尝试以下操作:

SELECT
    ls.id_team1,
    t1.name_team AS name_team_1,
    t1.image_team AS image_team_1,
    ls.id_team2,
    t2.name_team AS name_team_2,
    t2.image_team AS image_team_2
FROM Livestream ls
INNER JOIN Team t1
    ON ls.id_team1 = t1.id_team
INNER JOIN Team t2
    ON ls.id_team2 = t2.id_team
团队进行两次内部连接
可以达到目的。

试试以下方法:

SELECT
    ls.id_team1,
    t1.name_team AS name_team_1,
    t1.image_team AS image_team_1,
    ls.id_team2,
    t2.name_team AS name_team_2,
    t2.image_team AS image_team_2
FROM Livestream ls
INNER JOIN Team t1
    ON ls.id_team1 = t1.id_team
INNER JOIN Team t2
    ON ls.id_team2 = t2.id_team

使用
Team
进行两次内部连接可以达到目的。

我这样做了,我必须等待10分钟才能重新标记正确答案:)但很抱歉,我想问更多的问题:假设我有一个名为Livestream\u details的子表引用Livestream,如果我自动删除Livestream中的一行以从中删除其引用,那么我希望从中删除该行Livestream_详细说明了我应该在删除级联上使用哪里?这听起来像是一个完全不同的问题,因此我不会在评论部分回答它。你可能想问一个新问题,但是
关于DELETE CASCADE
听起来像是一个选项。我这样做了,我必须等待10分钟才能重新标记正确的答案:)但很抱歉,我想问更多的问题:假设我有一个名为Livestream_details的子表引用Livestream,如果我在Livestream中自动删除一行以从Livestream_details中删除它的引用,那么我想要它我应该在哪里使用delete cascade?这听起来像是一个完全不同的问题,因此我不会在评论部分回答它。您可能想问一个新问题,但是关于删除级联的
听起来像是一个选项。