有一张 成绩表 和一张 课程表假如 成绩表里是张三   语文    80
张三   数学    85
张三   英语    70李四   语文    70
课程表
语文
英语
数学
计算机要求输出
张三   语文    80
张三   数学    85
张三   英语    70
张三   计算机  null李四   语文    70
李四   数学    null
李四   英语    null
李四   计算机  null自己想了一点时间,没有思路,期盼大虾帮助

解决方案 »

  1.   

    select a.*,b.成绩
    from (select distinct 姓名,课程 from 成绩表,课程表 where 1=1) a left join 成绩表 b
    on a.姓名=b.姓名 and a.课程=b.课程
      

  2.   

    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 行受影响)*/
      

  3.   

    select 
    a.姓名,b.課程,c.成绩
    from (select distinct 姓名from 成绩表)a cross join 课程表 as b
    left join 成绩表 as c on a.姓名=c.姓名 and b.課程=c.課程
      

  4.   

    應該有一個學生表?select 
    a.姓名,b.課程,c.成绩
    from (select 姓名from 學生表)a cross join 课程表 as b
    left join 成绩表 as c on a.姓名=c.姓名 and b.課程=c.課程
      

  5.   

    csdn里的高手真多,呵呵,谢谢了
      

  6.   


    --创建测试表
    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