Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

UPDATE ... SELECT...


Silver_ ©   (2003-06-04 11:52:00) 

Нужно реализовать следующее, изменить запись в Table1 из таблицы Table2. Поля ВЕРНЫЕ
а выдается ошибка неверный синтаксис UPDATE. Да если чесно и мне кажется не совсем правельно (ощущение такое).

INSERT INTO Table1 (Fld1, Fld2)
SELECT Fld1, Fld2 FROM Table2 t2
WHERE t2.Fld1 = ...

Делаю так
UPDATE Table1 t1 SET (Fld1, Fld2)
SELECT Fld1, Fld2 FROM Table2 t2
WHERE t2.Fld1 = ...
WHERE t1.fld2 = ...

А как правельно???


Sandman25   (2003-06-04 14:49:00) [1]

Посмотрите исходный UPDATE.

UPDATE Table1 t1 SET (Fld1, Fld2)
SELECT Fld1, Fld2 FROM Table2 t2
WHERE t2.Fld1 = ...
WHERE t1.fld2 = ...

Придется его записать как

UPDATE Table1 t1 SET Fld1 =
(SELECT t2.Fld1 FROM Table2 t2
WHERE t2.Fld1 = ...),
Fld1 =
(SELECT t2.Fld2 FROM Table2 t2
WHERE t2.Fld1 = ...)
WHERE t1.fld2 = ...

Стало 2 вложенных селекта вместо 1, а ведь они связываются одинаково.


Johnmen   (2003-06-04 14:26:00) [2]

>вычисления одинаковых запросов несколько раз.

Не понял...:)


Sandman25   (2003-06-04 14:13:00) [3]

Johnmen © (04.06.03 12:51)

Это верно, но в стандарте SQL произойдет потеря эффективности из-за вычисления одинаковых запросов несколько раз. IMHO


Johnmen   (2003-06-04 12:51:00) [4]

Базовые конструкции языка SQL едины и не зависят от типа СУБД.
В данном случае синтаксис UPDATE Table SET F1=..., F2=..., ... WHERE ...


Sandman25   (2003-06-04 12:31:00) [5]

Наверное. У меня ж Informix


Silver_   (2003-06-04 12:30:00) [6]


> Sandman25 © (04.06.03 12:07)
>
> SET (Fld1, Fld2) =
> (( SELECT Fld1, Fld2 FROM Table2 t2
> WHERE t2.Fld1 = ...
> WHERE t1.fld2 = ...
))


Не работает хотя может быть потому что у меня Access


Silver_   (2003-06-04 12:19:00) [7]

Вот так получилось
UPDATE Table1 t1, Table2 t2
SET t1.Fld1 = t2.Fld1,
t1.Fld2 = t2.Fld2
WHERE t2.Fld1 = ...) AND (t1.Fld2 = ...)

Хотя попробую и

> Sandman25 © (04.06.03 12:07)

правда вот так :о)
UPDATE Table1
SET (Fld1, Fld2) =
(( SELECT Fld1, Fld2 FROM Table2 t2
WHERE t2.Fld1 = ... ))
WHERE t1.fld2 = ...


> В разделе о БД неплохо бы указывать тип СУБД, так как разный
> диалект SQL.

Да забыл, хотя в этом случае думаю не проблема

Спасибо


Sandman25   (2003-06-04 12:07:00) [8]

SET (Fld1, Fld2) =
(( SELECT Fld1, Fld2 FROM Table2 t2
WHERE t2.Fld1 = ...
WHERE t1.fld2 = ...
))


stone   (2003-06-04 11:59:00) [9]

В разделе о БД неплохо бы указывать тип СУБД, так как разный диалект SQL.
А так как делаешь ты - однозначно не правильно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо