如何对多个表执行全外连接
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
值可以出现在任何列中。
我是 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
值可以出现在任何列中。