如何对多个表执行全外连接

How to perform full outer joins on multiple tables

我是 MySQL 的新手,正在尝试对 3 个表执行完整的外部联接操作:

Student:-

usn(Primary key)

name

播放:-

usn(foreign key)

sport_id(foreign key)

运动:-

sport_id(primary key)

sport_name

我想获得参加某些运动的学生的姓名,如果他们不参加任何运动,我想要 NULL(因此是完整的外部连接),

我尝试执行查询:

select student.name, sport.name 
from student 
full outer join plays on student.usn = plays.usn
full outer join sport on plays.sport_id = sport.sport_id;

但是,我收到一个错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL 
server version for the right syntax to use near 'outer join plays on student.usn = plays.usn 
LIMIT 0, 25' at line 3

你能告诉我我做错了什么吗...?

您不想要 FULL JOIN。你想要一个 LEFT JOIN:

select s.name, sp.name 
from student s left outer join
     plays p
     on s.usn = p.usn left outer join
     sport sp
     on p.sport_id = sp.sport_id;

A left join 将所有行保留在第一个 table 中,并在随后的 table 中保留匹配行——这正是您想要的。

FULL JOIN 很少需要。我写了很多 SQL,几个月过去了,我没有在任何数据库中使用 full join

在此示例中,如果您想要所有没有学生的运动,则将使用 FULL JOIN。也就是说 NULL 值可以出现在任何列中。