例如有三张表
第一张:表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 中国的举办奥运会的时间是什么?
帮帮忙了,各位
第一张:表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 中国的举办奥运会的时间是什么?
帮帮忙了,各位
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 )
可以嘛。
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 行)
*/