Mysql 引用同一列的两个外键
我有两张桌子:Livestream和Team Livestream: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
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?这听起来像是一个完全不同的问题,因此我不会在评论部分回答它。您可能想问一个新问题,但是关于删除级联的听起来像是一个选项。