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);

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
















...全文
567 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

3,499

社区成员

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

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