左联接显示联接 table 中的多个值
Left Join showing multiple values from the joined table
有这个SQL:
create table Team(id integer, attacker int, midfield int, defender int);
insert into Team(id, attacker, midfield, defender) values(1, 50, 51, 51);
insert into Team(id, attacker, midfield, defender) values(2, 50, NULL, 55);
insert into Team(id, attacker, midfield, defender) values(12, 50, 53, NULL);
create table Footballer(id integer, name varchar(100));
insert into Footballer(id, name) values (50, "AbbaDude");
insert into Footballer(id, name) values (51, "BravoDude");
insert into Footballer(id, name) values (52, "Charlie");
insert into Footballer(id, name) values (53, "Dude");
insert into Footballer(id, name) values (54, "Elfonso");
insert into Footballer(id, name) values (55, "Fix");
select t.id, t.attacker, t.midfield, t.defender, f.name from Team t
left join Footballer f on f.id = t.id
我明白了:
id attacker midfield defender name
1 50 51 51 NULL
2 50 NULL 55 NULL
12 50 53 NULL NULL
我想查看来自 table Footballer
.
的名字,而不是数字(50、51、55 等)
id attacker midfield defender
1 AbbaDude BravoDude BravoDude
2 AbbaDude NULL Fix
12 AbbaDude Dude NULL
您需要 Footballer table 中的时间值。所以,
您必须使用此代码:
create table Footballer(id integer,teamId integer , name varchar(100))
insert into Footballer(id, name) values (50,[teamId], "AbbaDude");
insert into Footballer(id, name) values (51,,[teamId], "BravoDude");
select t.id, t.attacker, t.midfield, t.defender, f.name from Team t
left join Footballer f on f.teamId = t.id
所有代码:
create table Team(id integer, attacker int, midfield int, defender int);
insert into Team(id, attacker, midfield, defender) values(1, 50, 51, 51);
insert into Team(id, attacker, midfield, defender) values(2, 50, NULL, 55);
insert into Team(id, attacker, midfield, defender) values(12, 50, 53, NULL);
create table Footballer(id integer,teamID INTEGER, name varchar(100));
insert into Footballer(id,teamID, name) values (50,1, 'AbbaDude');
insert into Footballer(id,teamID, name) values (51,2, 'BravoDude');
insert into Footballer(id,teamID, name) values (52,1, 'Charlie');
insert into Footballer(id,teamID, name) values (53,12, 'Dude');
insert into Footballer(id,teamID, name) values (54,12, 'Elfonso');
insert into Footballer(id,teamID, name) values (55,1, 'Fix');
select t.id, t.attacker, t.midfield, t.defender, f.name from Team t
left join Footballer f on f.teamID = t.id
您可以使用此查询:
select t.id, at.name, md.name, df.name
from Team t
left join Footballer at on at.id = t.attacker
left join Footballer md on md.id = t.midfield
left join Footballer df on df.id = t.defender
您需要加入 table Footballer 三次,因此我们使用别名来了解我们指的是哪个加入。我喜欢用一个或两个字母的别名,但是一个字母让你知道你指的是什么。
这里a代表前锋,m代表中场,d代表后卫。
select
t.id,
a.name attacker,
m.name midfield,
d.name defender
from Team t
left join Footballer a on t.attacker = a.id
left join Footballer m on t.midfield = m.id
left join Footballer d on t.defender = d.id
id | attacker | midfield | defender
-: | :------- | :-------- | :--------
1 | AbbaDude | BravoDude | BravoDude
2 | AbbaDude | null | Fix
12 | AbbaDude | Dude | null
db<>fiddle here
有这个SQL:
create table Team(id integer, attacker int, midfield int, defender int);
insert into Team(id, attacker, midfield, defender) values(1, 50, 51, 51);
insert into Team(id, attacker, midfield, defender) values(2, 50, NULL, 55);
insert into Team(id, attacker, midfield, defender) values(12, 50, 53, NULL);
create table Footballer(id integer, name varchar(100));
insert into Footballer(id, name) values (50, "AbbaDude");
insert into Footballer(id, name) values (51, "BravoDude");
insert into Footballer(id, name) values (52, "Charlie");
insert into Footballer(id, name) values (53, "Dude");
insert into Footballer(id, name) values (54, "Elfonso");
insert into Footballer(id, name) values (55, "Fix");
select t.id, t.attacker, t.midfield, t.defender, f.name from Team t
left join Footballer f on f.id = t.id
我明白了:
id attacker midfield defender name
1 50 51 51 NULL
2 50 NULL 55 NULL
12 50 53 NULL NULL
我想查看来自 table Footballer
.
id attacker midfield defender
1 AbbaDude BravoDude BravoDude
2 AbbaDude NULL Fix
12 AbbaDude Dude NULL
您需要 Footballer table 中的时间值。所以, 您必须使用此代码:
create table Footballer(id integer,teamId integer , name varchar(100))
insert into Footballer(id, name) values (50,[teamId], "AbbaDude");
insert into Footballer(id, name) values (51,,[teamId], "BravoDude");
select t.id, t.attacker, t.midfield, t.defender, f.name from Team t
left join Footballer f on f.teamId = t.id
所有代码:
create table Team(id integer, attacker int, midfield int, defender int);
insert into Team(id, attacker, midfield, defender) values(1, 50, 51, 51);
insert into Team(id, attacker, midfield, defender) values(2, 50, NULL, 55);
insert into Team(id, attacker, midfield, defender) values(12, 50, 53, NULL);
create table Footballer(id integer,teamID INTEGER, name varchar(100));
insert into Footballer(id,teamID, name) values (50,1, 'AbbaDude');
insert into Footballer(id,teamID, name) values (51,2, 'BravoDude');
insert into Footballer(id,teamID, name) values (52,1, 'Charlie');
insert into Footballer(id,teamID, name) values (53,12, 'Dude');
insert into Footballer(id,teamID, name) values (54,12, 'Elfonso');
insert into Footballer(id,teamID, name) values (55,1, 'Fix');
select t.id, t.attacker, t.midfield, t.defender, f.name from Team t
left join Footballer f on f.teamID = t.id
您可以使用此查询:
select t.id, at.name, md.name, df.name
from Team t
left join Footballer at on at.id = t.attacker
left join Footballer md on md.id = t.midfield
left join Footballer df on df.id = t.defender
您需要加入 table Footballer 三次,因此我们使用别名来了解我们指的是哪个加入。我喜欢用一个或两个字母的别名,但是一个字母让你知道你指的是什么。
这里a代表前锋,m代表中场,d代表后卫。
select t.id, a.name attacker, m.name midfield, d.name defender from Team t left join Footballer a on t.attacker = a.id left join Footballer m on t.midfield = m.id left join Footballer d on t.defender = d.id
id | attacker | midfield | defender -: | :------- | :-------- | :-------- 1 | AbbaDude | BravoDude | BravoDude 2 | AbbaDude | null | Fix 12 | AbbaDude | Dude | null
db<>fiddle here