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

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

UPDATE в SQL


ish ©   (2004-01-10 09:08:00) 

Подскажите пожалуйста начинающему:
При работе требуется сделать UPDATE для одного поля (SET x=) по нескольким условиям (WHERE), Например:
SET x= 10
WHERE REZ = 20
SET x=30
WHERE REZ = 40
SET x=100
WHERE REZ = 80
и т.д.
Вопрос в том, как поставить SQL - запрос - использовать несколько UPDATE для каждого блока SET.. WHERE, или UPDATE будет
один, но много SET .. WHERE в нем?
А может сделать SELECT, а по нему UPDATE, а потом еще один SELECT
и по нему другой UPDATE ...
???


Vlad   (2004-01-12 15:34:00) [1]


> Valwww (12.01.04 15:29) [17]

угу... :-)


Valwww   (2004-01-12 15:29:00) [2]

>Vlad
а в Oracle 9i decode остался?


kaif   (2004-01-12 14:07:00) [3]

ish © (10.01.04 09:56) [6]
Ответ ЮЮ
если несколько раз писать
UPDATE TABLE SET X = :X WHERE REZ = :REZ
то выдается ошибка синтаксиса в выражении запроса


Там имя таблицы пропущено.


Vlad   (2004-01-12 13:59:00) [4]

>Valwww (12.01.04 13:48) [14]

В Оракле 8i насколько я помню, можно так:
update table
set Value = decode(ID,1,"А",4,"B",7,"C") where...


Valwww   (2004-01-12 13:48:00) [5]

А в Oracle 8i CASE в UPDATE не проходит.


ZrenBy   (2004-01-12 13:22:00) [6]

update table
set Value = case
when ID = 1 then "A"
when ID = 4 then "B"
when ID = 7 then "C"
end
where ID in (1,4,7)


SergSuper   (2004-01-12 12:24:00) [7]


> Sergey13

У меня MSSQL2000 - он поддерживает. Оракл тоже должен поддерживать, про остальные не знаю.


Sergey13   (2004-01-12 10:44:00) [8]

2SergSuper (12.01.04 10:34) [10]
Твой SQL такое поддерживает?


SergSuper   (2004-01-12 10:34:00) [9]

если Ваш SQL поддерживает вложенные селекты можно как-то так написать:
update YourTbl
set x=xx
from YourTbl, (select 10 xx, 20 rr union select 30,40
union select 80,100) ss
where REZ=rr

еще лучше какую-нибудь книжку почитать


ЮЮ   (2004-01-12 03:49:00) [10]

>Hako Lamer(10.01.04 15:10) [8]

Праметрический запрос для того и используется, чтобы написать запрос один раз, выполнить Prepare и использоватьмного раз


HakoLamer   (2004-01-10 15:10:00) [11]

если несколько раз писать...

Query1.SQL.Clear;
Query1.SQL.Add("UPDATE TABLE SET X = :X WHERE REZ = :REZ");
Query1.ExecSQL;

....то может все получится


Johnmen   (2004-01-10 14:58:00) [12]

>ish © (10.01.04 09:56)

Пишется 1 (один) раз. Выполняется - столько раз, сколько надо...


ish   (2004-01-10 09:56:00) [13]

Ответ ЮЮ
если несколько раз писать
UPDATE TABLE SET X = :X WHERE REZ = :REZ
то выдается ошибка синтаксиса в выражении запроса


ЮЮ   (2004-01-10 09:47:00) [14]

>SELECT, а по нему UPDATE

WHERE в UPDATE и есть то же самое, что и в SELECT


ish   (2004-01-10 09:35:00) [15]

А что вы думаете на счет - "А может сделать SELECT, а по нему UPDATE, а потом еще один SELECT
и по нему другой UPDATE ...???"


Vemer   (2004-01-10 09:24:00) [16]

А лучше (и быстрее) по ID строки ориентироваться, если одна запись правиться. При обработке группы строк в условий Where также AND, OR, Beetween, In применять можно по необходимости.

UPDATE TABLE SET X = :X WHERE ID = :ID (1 строка)
UPDATE TABLE SET X = :X WHERE REZ = :REZ AND Type = :Type (группа)


Alone Corsar   (2004-01-10 09:18:00) [17]

встречный вопрос не овсем понятно что такое REZ?? это поле в таблице??


ЮЮ   (2004-01-10 09:15:00) [18]

UPDATE TABLE SET X = :X WHERE REZ = :REZ

И выполнить столько раз, сколько нужно, не забывая менять параметры запроса


Наверх

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