![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Объединение UPDATE [MySQL]
Шоломицкий С. А. © (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]Необходимость в такой серии запросов означает только то, что структура таблиц базы данных отвратительно спроектирована.
Вот над этим и надо думать. А не о том, какой ветошью заткнуть течь...