Форум: "Начинающим";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
ВнизОбъединение 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;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.078 c