例如有三张表 
第一张:表a 为 题库  里面包含了每道题的详细内容 
表a: qid题编号  qcont题内容  qtime创建时间 
qid    qcont                            qtime 
1001    世界上人口最多的国家?              20090204 
1002    中国的国宝是什么?                  20090204 
1003    中国的举办奥运会的时间是什么?      20090204 第二张 表b是为学生所定制的题目  
表b: userid用户编号  qid题编号(引用表a的) 
userid  qid 
1212    1001 
1212    1002 第三张 表c是为学生已经回答过的题目答案 
表c: userid用户编号  qid题编号(引用表a的)    ans答案  time 回答时间 
userid  qid    ans    time 
1212    1001    中国  20090205 
1212    1002    熊猫  20090205 现在我的问题是:有一天,管理员将重新为学生定制的题目 也就是将表b的内容 
修改为: 
userid  qid 
1212    1003 学生查看以前做过的题目的时候也顺便把新定制的题目也显示出来,如果没有新的定制题目就只显示已经做的题目 这样的SQL语句该怎么去写啊??? 
例如: 1001 世界上人口最多的国家? 
中国 
1002 中国的国宝是什么? 
熊猫 
1003 中国的举办奥运会的时间是什么?可能我表达的意思不够明确,很多答案都不我想要的,现在如果把表b的内容删除或删除任意一天,以前做过的题目都要显示出来,如果给他新定制了题目
也就是表b中只有1003 结果是
1001 世界上人口最多的国家? 
中国 
1002 中国的国宝是什么? 
熊猫 
1003 中国的举办奥运会的时间是什么?
帮帮忙了,各位

解决方案 »

  1.   

    -----已经回答的问题
    select  A.qid.A.qcont,C.ans
    from A left outer join C
    on(A.qid=C.qid)
    union all
    -----新添加的问题select  A.qid.A.qcont,C.ans
    from A left outer join C
    on(A.qid=C.qid)
    left outer join  B
    on(A.qid=B.qid )
    可以嘛。
      

  2.   

    從C表根據qid得到已經回答過的問題 join 根據B表中qid得到的新問題。
      

  3.   

    if not object_id('a') is null
        drop table a
    Go
    Create table a([qid] int,[qcont] nvarchar(15),[qtime] Datetime)
    Insert a
    select 1001,N'世界上人口最多的国家?','20090204' union all
    select 1002,N'中国的国宝是什么?','20090204' union all
    select 1003,N'中国的举办奥运会的时间是什么?','20090204'
     
    if not object_id('b') is null
        drop table b
    Go
    Create table b([userid] int,[qid] int)
    Insert b
    select 1212,1001 union all
    select 1212,1002 union all
    select 1212,1003
     
    if not object_id('c') is null
        drop table c
    Go
    Create table c([userid] int,[qid] int,[ans] nvarchar(2),[time] Datetime)
    Insert c
    select 1212,1001,N'中国','20090205' union all
    select 1212,1002,N'熊猫','20090205'declare @str varchar(4000)
    select @str=isnull(@str,'')+ convert(varchar,Coalesce(c.qid,b.qid))+space(2)+ a.qcont +char(13)+ isnull(c.ans,'')+CHAR(13)
    from c
    full join b
      on c.userid=b.userid and c.qid=b.qid and c.userid='1212'
    full join a
      on Coalesce(c.qid,b.qid)=a.qid
    select @str
    /*
    ----------------------------------------------
    1001  世界上人口最多的国家?
    中国
    1002  中国的国宝是什么?
    熊猫
    1003  中国的举办奥运会的时间是什么?(所影响的行数为 1 行)
    */--删除部分记录
    DELETE  B WHERE QID IN(1001,1002)
    godeclare @str varchar(4000)
    select @str=isnull(@str,'')+ convert(varchar,Coalesce(c.qid,b.qid))+space(2)+ a.qcont +char(13)+ isnull(c.ans,'')+CHAR(13)
    from c
    full join b
      on c.userid=b.userid and c.qid=b.qid and c.userid='1212'
    full join a
      on Coalesce(c.qid,b.qid)=a.qid
    select @str
    /*
    ---------------------------------------------
    1001  世界上人口最多的国家?
    中国
    1002  中国的国宝是什么?
    熊猫
    1003  中国的举办奥运会的时间是什么?(所影响的行数为 1 行)
    */