![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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
И выполнить столько раз, сколько нужно, не забывая менять параметры запроса