oracle单行子查询返回多行

Edith1006 2012-08-09 05:26:07

update building xq set parent_id = (
select parent_id from building b where type = 1 and b.xq_sixid = xq.xq_sixid) where type = 0
请问大家,这个语句什么地方 错误,运行时报 单行子查询返回多行 的错误


一张表: building (id,name,xq_sixid,building_id,parent_id,type) type = 1 为小区 type = 0 为建筑物
数据: id name xq_sixid building_id parent_id type
1 小区a 111 123 1
2 小区b 222 124 1
3 建筑物a 111 125 (123) 0
4 建筑物a 111 126 (123) 0
5 建筑物b 222 127 (124) 0
括号中为要update的数据,就是把小区的building_id做为小区下面的建筑物的parent_id


创建表语句:
create table building(
id number(5),
name varchar2(10),
xq_sixid number(5),
building_id number(5),
parent_id number(5),
type number(5)
)
数据:
insert into building (id,name,xq_sixid,building_id,type)
values(1,'小区a',111,123,1);
insert into building (id,name,xq_sixid,building_id,type)
values(2,'小区b',222,124,1);
insert into building (id,name,xq_sixid,building_id,type)
values(3,'建筑物a',111,125,0);
insert into building (id,name,xq_sixid,building_id,type)
values(4,'建筑物a',111,126,0);
insert into building (id,name,xq_sixid,building_id,type)
values(5,'建筑物b',222,127,0);

希望高手帮看下,我被这个错误困扰很多次了——单行子查询返回多行
















...全文
530 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Edith1006 2012-08-09
  • 打赏
  • 举报
回复
查了,是我的数据有问题,太粗心害我弄了半天,谢谢各位了
Edith1006 2012-08-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

我执行了,完全没发现问题,执行成功。
[/Quote]
写错了
update building xq set parent_id = (
select building_id from building b where type = 1 and b.xq_sixid = xq.xq_sixid) where type = 0

奇怪,好像是没问题,不过这是我举的一个例子,实际的表要复杂一些
忆尘 2012-08-09
  • 打赏
  • 举报
回复
update building xq set parent_id = (
select parent_id from building b where type = 1 and b.xq_sixid = xq.xq_sixid) where type = 0

这个是你数据的问题吧,select parent_id from building b where type = 1 and b.xq_sixid = xq.xq_sixid
这段查询在执行过程中返回了多行,所以在UPDATE的时候会出错。
你可以对building 表进行GROUP by 一下查一下。应该是building 这个表中的数据有问题。你要确保按照type=1和xq_sixid=??只返回一行啊~~~
ORAClE SE 2012-08-09
  • 打赏
  • 举报
回复
语句要这样,才得到你的效果。
UPDATE Building Xq
SET Parent_Id = (SELECT building_id
FROM Building b
WHERE TYPE = 1
AND b.Xq_Sixid = Xq.Xq_Sixid)
ORAClE SE 2012-08-09
  • 打赏
  • 举报
回复
我执行了,完全没发现问题,执行成功。
睿智天成 2012-08-09
  • 打赏
  • 举报
回复

select parent_id from building b where type = 1 and b.xq_sixid = xq.xq_sixid


是否存在多行数据,如果不是唯一建议用 in
【完整Oracle SQL开发教程课件如下】 数据库开发 Oracle数据库 SQL开发教程 第0章 开篇概述(共14页).pdf 数据库开发 Oracle数据库 SQL开发教程 第01章 Oracle数据库基础(共60页).pdf 数据库开发 Oracle数据库 SQL开发教程 第02章 编写简单的查询语句(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第03章 限制数据和对数据排序(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第04章 单行函数(共61页).pdf 数据库开发 Oracle数据库 SQL开发教程 第05章 多表连接(共48页).pdf 数据库开发 Oracle数据库 SQL开发教程 第06章 分组函数(共41页).pdf 数据库开发 Oracle数据库 SQL开发教程 第07章 子查询(共49页).pdf 数据库开发 Oracle数据库 SQL开发教程 第08章 集合运算(共20页).pdf 数据库开发 Oracle数据库 SQL开发教程 第09章 高级子查询(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第10章 层次查询(共17页).pdf 数据库开发 Oracle数据库 SQL开发教程 第11章 数据操作与事务控制(共52页).pdf 数据库开发 Oracle数据库 SQL开发教程 第12章 Oracle数据库网络连接(共39页).pdf 数据库开发 Oracle数据库 SQL开发教程 第13章 创建和维护表(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第14章 约束(共33页).pdf 数据库开发 Oracle数据库 SQL开发教程 第15章 视图(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第16章 序列、索引、同义词(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第17章 用户、权限和角色(共28页).pdf

3,494

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧