select a.*,b.成绩 from (select distinct 姓名,课程 from 成绩表,课程表 where 1=1) a left join 成绩表 b on a.姓名=b.姓名 and a.课程=b.课程
create table 成绩表(name varchar(10),class varchar(10),c int) insert into 成绩表 select '张三','语文',80 insert into 成绩表 select '张三','数学',85 insert into 成绩表 select '张三','英语',70 insert into 成绩表 select '李四','语文',70 create table 课程表(class varchar(10)) insert into 课程表 select '语文' insert into 课程表 select '英语' insert into 课程表 select '数学' insert into 课程表 select '计算机' go select a.*,b.c from( select a.name,b.class from( select distinct name from 成绩表 )a,课程表 b )a left join 成绩表 b on a.name=b.name and a.class=b.class /* name class c ---------- ---------- ----------- 李四 语文 70 李四 英语 NULL 李四 数学 NULL 李四 计算机 NULL 张三 语文 80 张三 英语 70 张三 数学 85 张三 计算机 NULL(8 行受影响)*/
select a.姓名,b.課程,c.成绩 from (select distinct 姓名from 成绩表)a cross join 课程表 as b left join 成绩表 as c on a.姓名=c.姓名 and b.課程=c.課程
應該有一個學生表?select a.姓名,b.課程,c.成绩 from (select 姓名from 學生表)a cross join 课程表 as b left join 成绩表 as c on a.姓名=c.姓名 and b.課程=c.課程
csdn里的高手真多,呵呵,谢谢了
--创建测试表 CREATE TABLE #T1 ( F1 varchar(20), F2 varchar(20), F3 int ) --创建测试表 CREATE TABLE #T2 ( F2 varchar(20) )--插入测试数据 INSERT INTO #T1 SELECT '张三','语文',80 UNION ALL SELECT '张三','数学',85 UNION ALL SELECT '张三','英语',70 UNION ALL SELECT '李四','语文',70--插入测试数据 INSERT INTO #T2 SELECT '语文' UNION ALL SELECT '数学' UNION ALL SELECT '英语' UNION ALL SELECT '计算机' SELECT a.F1,a.F2,b.F3 FROM (SELECT DISTINCT F1,b.F2 FROM #T1 a,#T2 b) a LEFT JOIN #T1 b on a.F1=b.F1 AND a.F2=b.F2 --删除测试表 DROP TABLE #T1 DROP TABLE #T2
from (select distinct 姓名,课程 from 成绩表,课程表 where 1=1) a left join 成绩表 b
on a.姓名=b.姓名 and a.课程=b.课程
insert into 成绩表 select '张三','语文',80
insert into 成绩表 select '张三','数学',85
insert into 成绩表 select '张三','英语',70
insert into 成绩表 select '李四','语文',70
create table 课程表(class varchar(10))
insert into 课程表 select '语文'
insert into 课程表 select '英语'
insert into 课程表 select '数学'
insert into 课程表 select '计算机'
go
select a.*,b.c from(
select a.name,b.class
from(
select distinct name from 成绩表
)a,课程表 b
)a left join 成绩表 b on a.name=b.name and a.class=b.class
/*
name class c
---------- ---------- -----------
李四 语文 70
李四 英语 NULL
李四 数学 NULL
李四 计算机 NULL
张三 语文 80
张三 英语 70
张三 数学 85
张三 计算机 NULL(8 行受影响)*/
a.姓名,b.課程,c.成绩
from (select distinct 姓名from 成绩表)a cross join 课程表 as b
left join 成绩表 as c on a.姓名=c.姓名 and b.課程=c.課程
a.姓名,b.課程,c.成绩
from (select 姓名from 學生表)a cross join 课程表 as b
left join 成绩表 as c on a.姓名=c.姓名 and b.課程=c.課程
--创建测试表
CREATE TABLE #T1
(
F1 varchar(20),
F2 varchar(20),
F3 int
)
--创建测试表
CREATE TABLE #T2
(
F2 varchar(20)
)--插入测试数据
INSERT INTO #T1
SELECT '张三','语文',80 UNION ALL
SELECT '张三','数学',85 UNION ALL
SELECT '张三','英语',70 UNION ALL
SELECT '李四','语文',70--插入测试数据
INSERT INTO #T2
SELECT '语文' UNION ALL
SELECT '数学' UNION ALL
SELECT '英语' UNION ALL
SELECT '计算机'
SELECT a.F1,a.F2,b.F3 FROM (SELECT DISTINCT F1,b.F2 FROM #T1 a,#T2 b) a LEFT JOIN #T1 b on a.F1=b.F1 AND a.F2=b.F2 --删除测试表
DROP TABLE #T1
DROP TABLE #T2