蛋疼的笔试题目,求指教!! 一条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不支持啊???????
用关联更新或者用视图更新都可以了!