Update - & ошибка

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
elvira
Сообщения: 60
Зарегистрирован: 28 авг 2006, 22:59

Подскажите,помогите, пожалуйста, как найти решение

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

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?
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

А что надо сделать? Прапдейтить какую-то строчку в Tab1?
2B OR NOT(2B) = FF
elvira
Сообщения: 60
Зарегистрирован: 28 авг 2006, 22:59

Absurd писал(а):А что надо сделать? Прапдейтить какую-то строчку в Tab1?
такова была задумка
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

elvira писал(а):такова была задумка
А что если и в самом деле подзапрос возвращает более одной строки и правильная - не обязательно первая?
2B OR NOT(2B) = FF
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Если правильная - всегда первая, можно попробовать SELECT TOP 1 Tab2.Fl2
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

или, например select min(tab2.f12)...
Изображение
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Хыиуду писал(а):Если правильная - всегда первая, можно попробовать SELECT TOP 1 Tab2.Fl2
Она не будет правильная - условие сортировки в подзапросе не указано
2B OR NOT(2B) = FF
elvira
Сообщения: 60
Зарегистрирован: 28 авг 2006, 22:59

Absurd писал(а):Она не будет правильная - условие сортировки в подзапросе не указано
почему указано

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

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

WHERE  Tab2.f1 = Tab1.f1
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Это не условие сортировки. Условие сортировки это order by clause
2B OR NOT(2B) = FF
Popov_PV
Сообщения: 4
Зарегистрирован: 25 дек 2006, 09:10

Если под запрос возвращает несколько значений и все надо апдейтить,
то лучше делать через сторед.
вставляешь в нее цикл

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 - но тогда только самое первое значение будет писаться в апдейт.
Ответить