Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
4-1160299161
Чапаев
2006-10-08 13:19
2007.02.18
Непонятность с динамическим импортом


2-1170354770
Jeeb
2007-02-01 21:32
2007.02.18
Номенклатурная база данных


3-1164605686
Kvinta
2006-11-27 08:34
2007.02.18
DBGrid. Запомнить позицию.


3-1164095083
Patrick
2006-11-21 10:44
2007.02.18
Репликация в Oracle


15-1170147304
stone
2007-01-30 11:55
2007.02.18
Хотел бы я на это посмотреть :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский