update sp_family set (户主姓名)= (select a.pname from sp_person a ,sp_family b where trim(a.fcode)=trim(b.fcode));错误提示是:ORA-01427: 单行子查询返回多个行
这条语句该怎样写呢,sp_person和sp_family都有数据,两个表有个关联的字段fcode,然后把sp_family表中pname里的数据插到sp_person中的 户主姓名 字段中。
这条语句该怎样写呢,sp_person和sp_family都有数据,两个表有个关联的字段fcode,然后把sp_family表中pname里的数据插到sp_person中的 户主姓名 字段中。
解决方案 »
- Oracle中存储很大很长的字符串用什么类型??
- oracle分页的问题
- 【急啊!】手工建库创建实例(即后台控制服务)环节问题 Message 19 not found;
- 如何把同表中两个字段格式化成树型结构?
- red flag6下安装oracle10g,每次安装到62%时总卡在linking ntcontab这里
- 关于数据库连接问题
- imp的错误,别人的oracle数据库EXP出来的.DMP文件,导入失败?
- 触发器没有反映,不知道哪里出问题了! :(
- oracle8.1.7的连接问题,紧急!!!!!!!!!!!多谢
- 如何安装Oracle xml的开发组件?
- 如何识别网络包是否为oracle数据包
- Oracle中如何把存进去的二进制文件转换成图片文件
返回了多个值
SET a.户主姓名 = (SELECT b.pname FROM sp_person b WHERE TRIM(a.fcode) = TRIM(b.fcode))
不过这样会把同名的默认取第一个更新,不是很严谨
SET a.户主姓名 = (SELECT b.pname FROM sp_person b WHERE TRIM(a.fcode) = TRIM(b.fcode))
where exists (SELECT 1 FROM sp_person b WHERE TRIM(a.fcode) = TRIM(b.fcode))
SET a.户主姓名 = (SELECT b.pname FROM sp_person b WHERE TRIM(a.fcode) = TRIM(b.fcode))
如果无所谓,只要插个进去,那就加个 rownum = 1
具体点吧(oracle):
第一步 查出同名的person表的所有名字
SELECT b.pname FROM sp_person b,sp_famliy a where a.fcode=b.fcode and b.主键!=b.主键第二步 更新所有无同名的数据UPDATE sp_family a
SET a.户主姓名 = (SELECT b.pname FROM sp_person b WHERE TRIM(a.fcode) = TRIM(b.fcode))
where exists (SELECT 1 FROM sp_person b WHERE TRIM(a.fcode) = TRIM(b.fcode)
and b.pname not in(第一步粘贴到这里)
)没有做数据测试,可能具体语句有小错,而且我也不会优化过的,你自己看着修修吧
UPDATE sp_family a
SET a.户主姓名 = (SELECT b.pname FROM sp_person b WHERE TRIM(a.fcode) = TRIM(b.fcode)
and b.pname not in
(
select pname from (
select count(*) n ,pname from sp_person group by pname having count(*)>1));
我技术水平就这么点了,反正能实现功能,高手估计都没看到你这个题
select pname from (
select count(*) n ,pname from sp_person group by pname having count(*)>1)这几个人名有重名,你自己看着弄吧