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

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

Объединение UPDATE [MySQL]


Страницы:   1 2

Шоломицкий С. А. ©   (2007-01-31 20:20:00) 

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

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


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


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

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


Anatoly Podgoretsky   (2007-02-01 23:17:00) [2]

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

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


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

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

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


Anatoly Podgoretsky   (2007-02-01 19:58:00) [4]

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

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

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


Johnmen   (2007-02-01 11:32:00) [5]

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


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

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


Johnmen   (2007-02-01 10:50:00) [7]


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


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


fd979   (2007-02-01 08:30:00) [8]

Для 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)


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


ЮЮ   (2007-02-01 03:33:00) [9]

Шоломицкий С. А.   (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), которую и использовать в "универсальном" запросе


Johnmen   (2007-02-01 01:48:00) [10]

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


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

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


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

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


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


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


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


sniknik   (2007-01-31 23:55:00) [14]

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

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


sniknik   (2007-01-31 23:48:00) [15]

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


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

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

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

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

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

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


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

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


Anatoly Podgoretsky   (2007-01-31 23:16:00) [18]

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

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

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


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

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


Johnmen   (2007-01-31 23:02:00) [20]

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


Страницы:   1 2

Наверх

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