SQL语句的写法:Update、Case、 Select 一起的用法

修改数据,需要验证后修改对应的数据,而验证的字段不再修改表中,就需要对多表进行查询,花了些时间想出了如下办法,感觉还是挺有用的,也挺过瘾的,之前很少碰到这样的,所以再次记录下:

(此业务逻辑没有详细说明,如果你正在看这些,只需要看SQL的写的语法,相信您能看懂,也希望对您有所帮助)

 

  1. -----------------------------------------  
  2. --Update 与 Select 一起的用法  
  3. --Update 通过多表来修改数据  
  4. -----------------------------------------  
  5.   
  6. --参考写法1:  
  7. update B1 set strNum = strNum - B2.intNum  
  8. where strId in   
  9. (select intId from B2 where B2.intId = B1.strId)  
  10.   
  11. --参考写法2:  
  12. update B1 set strNum = strNum - B2.intNum  
  13. from B1 inner join B2  
  14. on B2.intId = B1.strId  
  15.   
  16. select *   
  17. from pro_res_assign,pro_gantt_task  
  18. where pro_res_assign.task_id = pro_gantt_task.task_id  
  19. and pro_res_assign.resource_id = 'jxstar4918'  
  20.   
  21. update pro_gantt_task   
  22. set pro_gantt_task.responsible_id = pro_res_assign.user_id ,  
  23.     pro_gantt_task.responsible =  pro_res_assign.res_name  
  24. from pro_res_assign,pro_gantt_task  
  25. where pro_res_assign.task_id = pro_gantt_task.task_id  
  26. and pro_res_assign.resource_id = 'jxstar4918'  
  27.   
  28.   
  29. ------------------------------  
  30. --最终完成的SQL  
  31. ------------------------------  
  32. update pro_gantt_task   
  33. set pro_gantt_task.responsible_id = (  
  34.         case when pro_res_assign.responsible_type = '1' then pro_res_assign.user_id else null end     
  35. ),  
  36. pro_gantt_task.responsible =  (  
  37.     case when pro_res_assign.responsible_type = '1' then pro_res_assign.res_name else null end    
  38. )  
  39. from pro_res_assign,pro_gantt_task  
  40. where pro_res_assign.task_id = pro_gantt_task.task_id  
  41. and pro_res_assign.resource_id = 'jxstar4918'  
  42.   
  43.   
  44. --测试查询  
  45. select res_type,user_id,res_name,task_id from pro_res_assign where resource_id = 'jxstar4918'  
  46. select responsible_id,responsible from pro_gantt_task  
  47.   
  48.   
  49. 以下是WBS计划反写备份:  
  50. --select user_id,res_name,task_id from pro_res_assign where resource_id = ?  
  51. --update pro_gantt_task set responsible_id = ? ,responsible =  ? where task_id = ?  


 这里只对SQL Server2008 测试通过,不知道Oracle/Mysql 其他的数据库还没测试;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值