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);希望高手帮看下,我被这个错误困扰很多次了——单行子查询返回多行

解决方案 »

  1.   


    select parent_id from building b where type = 1 and b.xq_sixid = xq.xq_sixid
    是否存在多行数据,如果不是唯一建议用 in
      

  2.   

    语句要这样,才得到你的效果。
    UPDATE Building Xq
       SET Parent_Id = (SELECT building_id
                          FROM Building b
                         WHERE TYPE = 1
                           AND b.Xq_Sixid = Xq.Xq_Sixid)
      

  3.   

    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=??只返回一行啊~~~
      

  4.   

    写错了
    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奇怪,好像是没问题,不过这是我举的一个例子,实际的表要复杂一些