Страница 1 из 1

Update - & ошибка

Добавлено: 07 дек 2006, 13:44
elvira
Подскажите,помогите, пожалуйста, как найти решение

Код: Выделить всё

UPDATE    TAB1
SET          Fl1 =
                    (SELECT    TAB2.Fl2
                      FROM          TAB2
                      WHERE TAB2.Fl1= TAB1.Fl1)
'пробовала и так

Код: Выделить всё

UPDATE    TAB1
SET    Fl1 =  
               (SELECT  Tab2.Fl2
                 FROM    Tab2 INNER JOIN
                             Tab1 ON Tab2.Fl1 = Tab1.Fl1)

вылетает ошибка:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
я так понимаю, что подзапрос возвращает более одной записи.
как сделать правильно Update?

Re: Update - & ошибка

Добавлено: 07 дек 2006, 14:18
Absurd
А что надо сделать? Прапдейтить какую-то строчку в Tab1?

Re: Update - & ошибка

Добавлено: 07 дек 2006, 15:51
elvira
Absurd писал(а):А что надо сделать? Прапдейтить какую-то строчку в Tab1?
такова была задумка

Re: Update - & ошибка

Добавлено: 07 дек 2006, 16:24
Absurd
elvira писал(а):такова была задумка
А что если и в самом деле подзапрос возвращает более одной строки и правильная - не обязательно первая?

Re: Update - & ошибка

Добавлено: 07 дек 2006, 16:29
Хыиуду
Если правильная - всегда первая, можно попробовать SELECT TOP 1 Tab2.Fl2

Re: Update - & ошибка

Добавлено: 07 дек 2006, 16:44
Игорь Акопян
или, например select min(tab2.f12)...

Re: Update - & ошибка

Добавлено: 07 дек 2006, 18:19
Absurd
Хыиуду писал(а):Если правильная - всегда первая, можно попробовать SELECT TOP 1 Tab2.Fl2
Она не будет правильная - условие сортировки в подзапросе не указано

Re: Update - & ошибка

Добавлено: 10 дек 2006, 16:14
elvira
Absurd писал(а):Она не будет правильная - условие сортировки в подзапросе не указано
почему указано

условие подзапроса выглядит так:

Код: Выделить всё

WHERE  Tab2.f1 = Tab1.f1

Re: Update - & ошибка

Добавлено: 11 дек 2006, 11:52
Absurd
Это не условие сортировки. Условие сортировки это order by clause

Re: Update - & ошибка

Добавлено: 25 дек 2006, 09:42
Popov_PV
Если под запрос возвращает несколько значений и все надо апдейтить,
то лучше делать через сторед.
вставляешь в нее цикл

for SELECT Tab2.Fl2
FROM Tab2 INNER JOIN
Tab1 ON Tab2.Fl1 = Tab1.Fl1
into :temp_f12
do
UPDATE TAB1 SET Fl1 = :temp_F12

ну или first 1 tab2.F12 - но тогда только самое первое значение будет писаться в апдейт.