Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.18;
Скачать: CL | DM;

Вниз

Объединение UPDATE   Найти похожие ветки 

 
Шоломицкий С. А.   (2007-01-31 20:20) [0]

Всех приветствую! Скажи пожалуйста, что здесь неправильно?

(UPDATE table SET "col"=0 where "col"=1) UNION (UPDATE table SET "col"=2 where "col"=3)


 
Johnmen ©   (2007-01-31 20:49) [1]

Синтаксис неправильный.


 
Шоломицкий С. А.   (2007-01-31 20:52) [2]

понятно, что что-то неправильно
ну а как тогда правильно, может подскажете?


 
Johnmen ©   (2007-01-31 20:58) [3]

mysql.ru подскажет


 
Anatoly Podgoretsky ©   (2007-01-31 21:16) [4]

> Шоломицкий С. А.  (31.01.2007 20:20:00)  [0]

Что ты здесь хотел сказать?


 
sniknik ©   (2007-01-31 21:31) [5]

шедевр просто! только ради него (мысли вслух: может собственный орешник организовать?)

UPDATE table1
SET col=col-1
WHERE col=1 OR col=3

(хотя надежды мало, все равно счас выяснится не это нужно...)


 
Виталий Панасенко ©   (2007-01-31 21:51) [6]

м-да


 
Шоломицкий С. А.   (2007-01-31 22:30) [7]


> UPDATE table1
> SET col=col-1
> WHERE col=1 OR col=3

к чему это??
объясняю подроблнее, что мне нужно:
можно было двумя запросами, к примеру:
UPDATE table SET "col"=0 where "col"=1;
UPDATE table SET "col"=2 where "col"=3;

надо одним.
Тоесть, если в поле стоит "0" , то его надо заменить на "1", если
стоит "2", то заменить на "3"


 
Anatoly Podgoretsky ©   (2007-01-31 22:37) [8]

> Шоломицкий С. А.  (31.01.2007 22:30:07)  [7]

Ну у тебя то два и почему то странное слово UNION, что не применимо для запросов не возвращающих данных. Но если бы было разрешено, то сначала бы выполнился один запрос, потом второй, что и достигается выбрасыванием UNION.


 
Шоломицкий С. А.   (2007-01-31 22:43) [9]

мне нельзя использовать 2 запроса вот почему:
если в первый запрос такой
UPDATE table SET "col"=0 where "col"=1;
а второй такой
UPDATE table SET "col"=2 where "col"=0

то в итоге, та запись, что была изменена в первом запросе поменяется ещё раз! а мне надо чтобы она не изменялась. Чтобы все цифры разом заменились на другие в зависимости от их значения, а не повторно просмотирвалась база и уже изменённые менялись заново.
Надеюсь, у меня получилось объяснить, что мне нужно.

Можно конечно пробегатьсяпо всем записям подряд один раз и выполнять много запросов...но этого очень бы не хотелось


 
Anatoly Podgoretsky ©   (2007-01-31 22:46) [10]

> Шоломицкий С. А.  (31.01.2007 22:43:09)  [9]

А ты местами их поменяй и проблемы не будет.


 
Шоломицкий С. А.   (2007-01-31 22:57) [11]

будет проблема...это я тут написал 2 условия.., а вообще их больше...и будут накладываться друг на друга((


 
Johnmen ©   (2007-01-31 23:02) [12]

Необходимость в такой серии запросов означает только то, что структура таблиц базы данных отвратительно спроектирована.
Вот над этим и надо думать. А не о том, какой ветошью заткнуть течь...


 
Шоломицкий С. А.   (2007-01-31 23:09) [13]

Да мне -то...
не я вообще всё это писал и мне особо конечно пофигу на всё...
озвонили, попросили сделать следующее..
есть Excel таблица...её конвертируют в MySql таблицу. Просят написать прогу, которая изменит значения одного поля... тоесть если стоит, к примеру, 2, то заменить на 3, если 3, то заменить на 2.
Хотел сделать всё одним запросом...ну ничего..придётся пробежаться по всем записям..


 
Anatoly Podgoretsky ©   (2007-01-31 23:16) [14]

> Шоломицкий С. А.  (31.01.2007 23:09:13)  [13]

> Хотел сделать всё одним запросом...ну ничего..придётся пробежаться по всем записям..

Не получится. Ты просто не в ладах с логикой и теорией реляционных баз данных. Лучше сразу скажи заказчиками, что это не твое.


 
Шоломицкий С. А.   (2007-01-31 23:38) [15]

Ну прям, так и сделаю))
по циклу всё будет у них..


 
sniknik ©   (2007-01-31 23:46) [16]

Anatoly Podgoretsky ©   (31.01.07 23:16) [14]
> Не получится.
3 на 2, а 2 на 3 одним запросом? на mssql или access - легко. вероятно и на mysql можно, функции с условиями тоже должны быть, только неохота рыскать по документации неиспользуемого (и вряд ли понадобится)  сервера.

или это про обледенение 2х юнионом? ну тогда да, не получится.

> Лучше сразу скажи заказчиками, что это не твое.
ага. пусть наймут программиста.

Шоломицкий С. А.   (31.01.07 22:30) [7]
> к чему это??
это полностью выполняет пожелания "угаданные" в [0], то чего ты там предположительно делал.

> по циклу всё будет у них..
вот с циклом то как раз облом и будет. ;о), если одним... вот двумя, да с промежуточным значением... это да. можно.


 
sniknik ©   (2007-01-31 23:48) [17]

> вот с циклом то как раз облом и будет.
хотя нет... сорри. это я "зарапортовался". получится.


 
sniknik ©   (2007-01-31 23:55) [18]

> 3 на 2, а 2 на 3 одним запросом
для access

UPDATE table1
SET col=iif(col=2, 3, 2)
WHERE col=2 OR col=3


 
Шоломицкий С. А.   (2007-02-01 00:08) [19]


> 3 на 2, а 2 на 3 одним запросом? на mssql или access - легко.
>  вероятно и на mysql можно, функции с условиями тоже должны
> быть, только неохота рыскать по документации неиспользуемого
> (и вряд ли понадобится)  сервера.
>
> или это про обледенение 2х юнионом? ну тогда да, не получится.
>


мне ьез разницы как записать...юнионом или нет...главное чтобы одним запросом!)


 
Шоломицкий С. А.   (2007-02-01 00:10) [20]

замучался искать..можно так или нельзя всё-таки


 
sniknik ©   (2007-02-01 00:49) [21]

> замучался искать..можно так или нельзя всё-таки
а кто тебе должен искать для твоего sql сервера?
и проверять/адаптировать для него.

вот для mssql не используя функций выбора (case), на обьеденении, изврат конечно но вдруг у mysql таких функций (аналогов) нет а подобное обьеденение с подзапросом поймет? (... сомнительно, но всеже)

UPDATE table1
SET col=a2.val
FROM table1 a1 INNER JOIN (SELECT 2 AS col, 3 AS val UNION SELECT 3, 2) a2 ON a1.col=a2.col


 
Johnmen ©   (2007-02-01 01:48) [22]

Вот так. Через вложенные ифы.
UPDATE table1
SET col=IF(col=2, 3, IF(col=3,2,IF(col=1,0,IF(...))))


 
ЮЮ ©   (2007-02-01 03:33) [23]

Шоломицкий С. А.   (31.01.07 22:30) [7]

> UPDATE table1
> SET col=col-1
> WHERE col=1 OR col=3

к чему это??
объясняю подроблнее, что мне нужно:
можно было двумя запросами, к примеру:
UPDATE table SET "col"=0 where "col"=1;
UPDATE table SET "col"=2 where "col"=3;,а
надо одним.
Тоесть, если в поле стоит "0" , то его надо заменить на "1", если
стоит "2", то заменить на "3"


Твои запросы противорячет твоим желаниям. А
UPDATE table1
SET col=col-1
WHERE col=1 OR col=3
как раз меняет 1 на 0, и 3 на 2, как и записано в твоих запросах.
Если же тебе надо наоборот, то так и надо говорить, Тогда запрос примет вид
UPDATE table1
SET col=col+1
WHERE col=0 OR col=2

В [13] ты уже захотел другого: "если стоит, к примеру, 2, то заменить на 3, если 3, то заменить на 2",
тогда
UPDATE table1
SET col= 5 - col
WHERE col=2 OR col=3

Если же хочешь универсальный запрос на любую замену, то стоит подумать о вспомогательной таблице (OldCol, NewCol), которую и использовать в "универсальном" запросе


 
fd979 ©   (2007-02-01 08:30) [24]

Для SQL Server можно так:

Update Table1 Set
Col =

(Case

When Col = 1 Then 10
When Col = 2 Then 9
When Col = 3 Then 8
When Col = 4 Then 7
When Col = 5 Then 6
When Col = 6 Then 5
When Col = 7 Then 4
When Col = 8 Then 3
When Col = 9 Then 2
When Col = 10 Then 1
end)


Вставь свои значения.


 
Johnmen ©   (2007-02-01 10:50) [25]


> Вставь свои значения.


Я вставлю - где варианты для IB, для Oracle, для DB2, для Informix, да и для Access"а наконец? Давай приводи, автору это очень надо...


 
Шоломицкий С. А.   (2007-02-01 10:58) [26]

Спасибо, fd979!!!!
Это то, что нужно!!!!! Круто!!!


 
Johnmen ©   (2007-02-01 11:32) [27]

Вот так правомерно для MySQL
Case Col
When 1 Then 10
When 2 Then 9
When 3 Then 8
...
end


 
Anatoly Podgoretsky ©   (2007-02-01 19:58) [28]

> sniknik  (31.01.2007 23:46:16)  [16]

> только неохота рыскать по документации неиспользуемого (и вряд ли понадобится)  сервера.

Правильно нафиг оно нам нужно.


 
Шоломицкий С. А.   (2007-02-01 22:57) [29]

> только неохота рыскать по документации неиспользуемого (и вряд ли понадобится)  сервера.

а что, это плохой сервер?


 
Anatoly Podgoretsky ©   (2007-02-01 23:17) [30]

> Шоломицкий С. А.  (01.02.2007 22:57:29)  [29]

Иногда называют недосервером.
Во всяком случае использовать это в качестве продакшен сервер как то не светит.


 
Шоломицкий С. А.   (2007-02-02 01:59) [31]


> Иногда называют недосервером.
> Во всяком случае использовать это в качестве продакшен сервер
> как то не светит.

спасибо, буду знать



Страницы: 1 вся ветка

Текущий архив: 2007.02.18;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.032 c
3-1164717372
newby
2006-11-28 15:36
2007.02.18
Максимальное количество полей в Access


1-1167054426
atruhin
2006-12-25 16:47
2007.02.18
Unit XXX implictly imported into package YYYY


1-1167123288
DelphiLexx
2006-12-26 11:54
2007.02.18
Отрисовка в заголовка DBGridEh a


15-1169797740
zdm
2007-01-26 10:49
2007.02.18
GIF


2-1169887745
DemonP
2007-01-27 11:49
2007.02.18
отправка почты на Delphi