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

蛋疼的笔试题目,求指教!! 一条sql语句同时修改两个表中的字段
1、 表名:g_cardapply

  字段(字段名/类型/长度):

  g_applyno varchar 8;//申请单号(关键字)

  g_applydate bigint 8;//申请日期

  g_state varchar 2;//申请状态

  2、 表名:g_cardapplydetail

  字段(字段名/类型/长度):

  g_applyno varchar 8;//申请单号(关键字)

  g_name varchar 30;//申请人姓名

  g_idcard varchar 18;//申请人身份证号

  g_state varchar 2;//申请状态

  其中,两个表的关联字段为申请单号。



题目:---------------------------

 将身份证号码为440401430103082的记录在两个表中的申请状态均改为07


注意!!!: 一条SQL语句,是一条!!! 不要触发器,不要过程函数!!! 求大神指点迷津!
------解决方案--------------------
--这个可以更新啊!两个表的主键都是g_applyno varchar 8;//申请单号(关键字)吧?
update g_cardapply a inner join g_cardapplydetail b
on a.g_applyno = b.g_applyno and b.g_idcard = '440401430103082'
set a.g_state = '07', b.g_state = '07'

------解决方案--------------------
真是蛋疼,出这样笔试题的人应该拉出去打。oracle是用来服务使用的,不是用来难为人的。
别说不能同时更新,即使能同时更新,尼玛为啥非这样要求呢。还不让用过程,还不触发器
据说mysql支持多表同时更新。
------解决方案--------------------
引用:
SQL code
--这个可以更新啊!两个表的主键都是g_applyno varchar 8;//申请单号(关键字)吧?
update g_cardapply a inner join g_cardapplydetail b
on a.g_applyno = b.g_applyno and b.g_idcard = '440401430103082'
set a.g_state = '07……


执行不了,缺失SET关键字
------解决方案--------------------
oracle中update语句不支持表关联吧,用merge into试一下吧
------解决方案--------------------
引用:
oracle中update语句不支持表关联吧,用merge into试一下吧

据我所知,merge into也不支持同时更新两个表吧?
------解决方案--------------------
引用:
这题搁到 sql server就非常简单了.

update t.g_state='07' ,t1.g_state='07' 

from g_cardapply t ,g_cardapplydetail t1 
where t.g_applyno=t1.g_applyno and t1.g_idcard='440401430103082'


原来这样写不行,看来这问题一条sql语句 有点难搞
------解决方案--------------------

----你这两个表的主键都是一样的那就好搞啊。使用视图更新就行了,这种用法只适合主键相同情况
update (select a1.g_applyno, a1.g_state gs1, a2.g_idcard, a2.g.g_state gs2
          from g_cardapply a1, g_applyno a2
         where a1.g_applyno = a2.g_applyno
           and a2.g_idcard = '440401430103082') v
   set v.gs1 = '07', v.gs2 = '07'

------解决方案--------------------
update语句不支持表关联吧???
谁说ORACLE不支持啊???????
用关联更新或者用视图更新都可以了!
------解决方案--------------------
引用:
update语句不支持表关联吧???
谁说ORACLE不支持啊???????
用关联更新或者用视图更新都可以了!