学生表
学号,姓名
001,小明
002,小红
003,小王
成绩表
学号1,学号2
001,002
003,null
null,001
我现在需要的结果是
姓名1,姓名2
小明,小红
小王,null
null,小明
学号,姓名
001,小明
002,小红
003,小王
成绩表
学号1,学号2
001,002
003,null
null,001
我现在需要的结果是
姓名1,姓名2
小明,小红
小王,null
null,小明
from 成绩表 a left join 学生表 b1 on a.学号1 = b1.学号
left join 学生表 b2 on a.学号2 = b2.学号
from 成绩表 C
left join 学生表 S1 on C.学号1 = S1.学号
left join 学生表 S2 on C.学号2 = S2.学号
insert #学生表 select '001','小明'
insert #学生表 select '002','小红'
insert #学生表 select '003','小王'create table #成绩表(学号1 varchar(5),学号2 varchar(5))
insert #成绩表 select '001','002'
insert #成绩表 select '003',null
insert #成绩表 select null,'001'
select b.姓名 as 姓名1 ,c.姓名 as 姓名2
from #成绩表 a left join #学生表 b on a.学号1=b.学号
left join #学生表 c on a.学号2=c.学号姓名1 姓名2
----- -----
小明 小红
小王 NULL
NULL 小明(3 行受影响)
if object_id('[学生表]') is not null drop table [学生表]
create table [学生表]([学号] varchar(3),[姓名] varchar(4))
insert [学生表]
select '001','小明' union all
select '002','小红' union all
select '003','小王'select * from [学生表]
--> 测试数据:[成绩表]
if object_id('[成绩表]') is not null drop table [成绩表]
create table [成绩表]([学号1] varchar(3),[学号2] varchar(3))
insert [成绩表]
select '001','002' union all
select '003',null union all
select null,'001'
select b1.姓名 as 姓名1,b2.姓名 as 姓名2
from 成绩表 a
left join 学生表 b1 on a.学号1 = b1.学号
left join 学生表 b2 on a.学号2 = b2.学号
/*
姓名1 姓名2
---- ----
小明 小红
小王 NULL
NULL 小明(3 行受影响)
*/
(select 姓名 from 学生表 n where n.学号1 = m.学号) 姓名1,
(select 姓名 from 学生表 n where n.学号1 = m.学号) 姓名2
from 成绩表 m
成绩表join两次学生表.....
insert [学生表]
select '001','小明' union all
select '002','小红' union all
select '003','小王'create table [成绩表]([学号1] varchar(3),[学号2] varchar(3))
insert [成绩表]
select '001','002' union all
select '003',null union all
select null,'001'select n1.姓名 姓名1,
n2.姓名 姓名2
from 成绩表 m
left join 学生表 n1 on m.学号1 = n1.学号
left join 学生表 n2 on m.学号2 = n2.学号drop table 学生表 ,成绩表/*
姓名1 姓名2
---- ----
小明 小红
小王 NULL
NULL 小明(所影响的行数为 3 行)
*/
create table 学生表
(学号 varchar(20),
姓名 varchar(20)
)
insert into 学生表
select '001','小明' union all
select '002','小红'union all
select '003','小王'create table 成绩表
(学号1 varchar(20),
学号2 varchar(20)
)
insert into 成绩表
select '001','002' union all
select '003',null union all
select null,'001'select
(select 姓名 from 学生表 where 学号=A.学号1) as x1,
(select 姓名 from 学生表 where 学号=A.学号2) as x2
from 成绩表 A