日期:2014-05-17  浏览次数:20508 次

求一条简单的SQL语句写法,两表UPDATE
大虾们,我有A表,B表两个表,在同一个数据库(SQL2005)中。 现在要求写一条语句实现这样的功能:

把A表记录中,字段 A.Nowtype更新为'到期',条件是: 假如A.STUDENTID=B.STUDENTID,并且B.Isend='到期' 的所有记录。

中文意思是:
  B表中放的是学生报的课程班(语文,数学,英语等),可能同一个学生会报很多门不同的课程班,当某个学生报的所有课程班,比如,语文、数学,都到期以后,则在学生信息表A表中,将a.nowtype更新为'到期'; 若B表中,某个学生报的课程班还有1个没有到期,则A表不更新。
  (B表中,学生报一个课程班,就有1条记录,报多个课程班,会有多个记录,和A表关联时,studentid是唯一的)


------解决方案--------------------
SQL code
update A
set A.nowtype = '到期'
from A
inner join B on A.STUDENTID=B.STUDENTID and B.Isend='到期'

------解决方案--------------------
SQL code
update A set A.Nowtype='到期'
from A join (
  select STUDENTID 
  from B 
  group by STUDENTID 
  having count(*)=sum(case when Isend='到期' then 1 else 0 end)
)  T on A.STUDENTID=T.STUDENTID

------解决方案--------------------
SQL code
update
 a 
set
 a.Nowtype='到期'
from
 a , 
 (select STUDENTID from B  group by STUDENTID having count(1)=sum(case when Isend='到期' then 1 else 0 end)
)b
where
 a.STUDENTID=b.STUDENTID

------解决方案--------------------
update a set Nowtype = '到期' from a where STUDENTID not in
(select distinct STUDENTID from b where B.Isend <> '到期')

------解决方案--------------------
探讨
update a set Nowtype = '到期' from a where STUDENTID not in
(select distinct STUDENTID from b where B.Isend <> '到期')


这里面,not in应该是in吧?

------解决方案--------------------
探讨
下午散分。谢谢