Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 опять update...  [new]
Тимур Б
Member

Откуда:
Сообщений: 141
Имеется таблица vibor(g33a,name,g46i,g46e)
заполняю три поля

insert into vibor(g33a,name,g46i) (select char(g33a,4),c.small_name,sum(g46)
from t_st2006,country c where not id=any(select cntkod from countrygroupdef where groupkod=2)and g01a='ИМ' and s15_17=c.id
group by char(g33a,4),c.small_name,g46 order by g46 desc fetch first 50 rows only)

делаю такой update для 4-го поля

update vibor r set (g46e)=(select sum(g46)from t_st2006,country c where not id=any(select cntkod from countrygroupdef
where groupkod=2)and g01a='ЭК' and s15_17=c.id and char(g33a,4)=r.g33a and
c.small_name=r.name
group by char(g33a,4),c.small_name,g46 order by g46 desc fetch first 50 rows only)

Результат скалярной полной выборки, оператора SELECT INTO или
оператора VALUES INTO - больше одной строки таблицы. SQLSTATE=21000
хотя я указал c.small_name=r.name, в чем я ошибаюсь?
28 фев 07, 13:10    [3842506]     Ответить | Цитировать Сообщить модератору
 Re: опять update...  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4946
У вас уникальный ключ (или индекс) в таблице vibor есть?
Если есть, то какой?
28 фев 07, 13:35    [3842720]     Ответить | Цитировать Сообщить модератору
 Re: опять update...  [new]
Тимур Б
Member

Откуда:
Сообщений: 141
Mark Barinstein
У вас уникальный ключ (или индекс) в таблице vibor есть?
Если есть, то какой?


name получается и есть ключ.
28 фев 07, 13:42    [3842773]     Ответить | Цитировать Сообщить модератору
 Re: опять update...  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4946
Тимур Б
name получается и есть ключ.
Вы понимаете, что делая group by char(g33a,4),c.small_name,g46, вы в обоих случаях (insert и update) для одного и того же small_name можете получить несколько записей?
А в update вы еще и пытаетесь g33a использовать в качестве ключевой колонки, и все равно не получается, т.к. даже для этих 2-х полей (g33a и small_name) в каких-то случаях сабселект возвращает несколько записей.
Если бы оно было так, как вы говорите, то update должен был бы выглядеть примерно так:
update vibor r set (g46e)=
(
select sum(g46)
from t_st2006,country c 
where not id=any(select cntkod from countrygroupdef where groupkod=2)
and g01a='ЭК' and s15_17=c.id and c.small_name=r.name
);
28 фев 07, 14:09    [3842983]     Ответить | Цитировать Сообщить модератору
 Re: опять update...  [new]
Тимур Б
Member

Откуда:
Сообщений: 141
Mark Barinstein
Тимур Б
name получается и есть ключ.
Вы понимаете, что делая group by char(g33a,4),c.small_name,g46, вы в обоих случаях (insert и update) для одного и того же small_name можете получить несколько записей?
А в update вы еще и пытаетесь g33a использовать в качестве ключевой колонки, и все равно не получается, т.к. даже для этих 2-х полей (g33a и small_name) в каких-то случаях сабселект возвращает несколько записей.
Если бы оно было так, как вы говорите, то update должен был бы выглядеть примерно так:
update vibor r set (g46e)=
(
select sum(g46)
from t_st2006,country c 
where not id=any(select cntkod from countrygroupdef where groupkod=2)
and g01a='ЭК' and s15_17=c.id and c.small_name=r.name
);


Спасибо что помогли разобраться, я хотел сделать так(по двум ключам)
update vibor r set (g46e)=
(
select sum(g46)
from t_st2006,country c
where not id=any(select cntkod from countrygroupdef where groupkod=2)
and g01a='ЭК' and s15_17=c.id and c.small_name=r.name,char(g33a,4)=r.g33a
все норм
28 фев 07, 14:35    [3843163]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить