先理顺一下逻辑:三张表,车主cz(czid,dwdz),车辆cl(czid,clph),公安police(clph,dwdz)
cz.czid=cl.czid; cl.clph=police.clph
显然有可能对于一个czid存在多个对应的clph,这样就存在多个police.dwdz,这样的情况该取哪个值来更新cz表中的dwdz呢?
假设从业务逻辑上不可能存在上述情况,也就是说cz.dwdz与police.dwdz至多是1:1关系
那么你可以这样写:UPDATE cz SET cz.dwdz = ( SELECT police.dwdz FROM cl, police WHERE cl.clph = police.clph AND cl.czid = cz.czid ) WHERE cz.dwdz IS NOT NULL如果子查询返回多值那就会发生上面我说的问题了,可能发生返回多值或者返回空
UPDATE cz SET cz.dwdz = ( SELECT police.dwdz FROM cl, police WHERE cl.clph = police.clph AND cl.czid = cz.czid AND rownum < 2 ) WHERE cz.dwdz IS NOT NULL
cz.czid=cl.czid; cl.clph=police.clph
显然有可能对于一个czid存在多个对应的clph,这样就存在多个police.dwdz,这样的情况该取哪个值来更新cz表中的dwdz呢?
假设从业务逻辑上不可能存在上述情况,也就是说cz.dwdz与police.dwdz至多是1:1关系
那么你可以这样写:UPDATE cz SET cz.dwdz = ( SELECT police.dwdz FROM cl, police WHERE cl.clph = police.clph AND cl.czid = cz.czid ) WHERE cz.dwdz IS NOT NULL如果子查询返回多值那就会发生上面我说的问题了,可能发生返回多值或者返回空
UPDATE cz SET cz.dwdz = ( SELECT police.dwdz FROM cl, police WHERE cl.clph = police.clph AND cl.czid = cz.czid AND rownum < 2 ) WHERE cz.dwdz IS NOT NULL
解决方案 »
- c++ Oracle ado command timeout
- 有关违反约束性条件的问题
- 数据库可以连上,但执行应用程序报错 ORA-12154 TNS-12560 TNS-00530
- pl-sql连接本地服务器(Oraclei)
- 请问如何复制一个表
- pl/sql developer在哪里可以导出table script?
- sql语句,请大家指点一下
- update xvipinfo a set a.vipapptime='2005-9-8' where a.vipid='55568'
- 555555555,sql语句求教 (不然晚上回不去了)
- Oracle9i(9.0.1.0.0)的jdbc驱动程序哪儿有?
- 这样的插入应该怎么写?
- 关于读一致的问题(ado)
请楼主好好考虑一下他的实际意义!
回kulama2004(kulama) ,你的写法是我最初的时候写的,可是这样,不是一一对应,报的错是返回的结果多于一行,因此是否必须在where后面把更新范围写死?