Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2011, 12:02   #1
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию update столбца массивом данных

прошу прощения за простой вопрос.
в таблице нужно заменить строки набором данных (не одной строкой! а массивом из строк), как будет выглядеть типовой запрос?
kate158 вне форума Ответить с цитированием
Старый 16.12.2011, 12:09   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если под массивом строк имеется ввиду данные из другой таблицы, то примерно так
Код:
UPDATE Tablica1
  SET Field1=(SELECT <выражение или поле> FROM Tablica2 WHERE ...)
  WHERE ...
Важно - вложенный SELECT должен возвращать одно поле и одну строку
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.12.2011, 12:11   #3
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

под массивом строк понимается много разных строк. к примеру в исходном столбце есть строки со значениями: 15, 20 , 25 (таких строк 9000 =)) значения которых мне нужно заменить на 15000,20000,25000 и т.д...
в том то и дело, что мой вложенный селект возвращает много строк
вот мой код:
Код:
update reqvalues
set reqvalues.value=(

select v.value*1000 from reqvalues as v
inner join request as r
on r.reqid=v.reqid
where r.customerid=7
and r.contractid=6
and r.objectid=37
and r.datedst>='01.01.2011'
and v.value<100)

Последний раз редактировалось kate158; 16.12.2011 в 12:47.
kate158 вне форума Ответить с цитированием
Старый 16.12.2011, 12:14   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так не пойдет. Во WHERE вложенного SELECT используйте привязку к полям редактируемой таблицы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.12.2011, 12:20   #5
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

разве у меня нет привязки?
kate158 вне форума Ответить с цитированием
Старый 16.12.2011, 12:27   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А так не пойдет?
Код:
update reqvalues
  set value=value*1000
  where customerid=7
and contractid=6
and objectid=37
and datedst>='01.01.2011'
and value<100
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 16.12.2011 в 12:39.
Аватар вне форума Ответить с цитированием
Старый 16.12.2011, 12:32   #7
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

куда теперь деть from? у меня же 2 таблицы
)))
kate158 вне форума Ответить с цитированием
Старый 16.12.2011, 12:38   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А зачем он? Имя таблицы reqvalues есть, поля во WHERE к этой таблице имеют отношение. В таком случае FROM не нужен. Он нужен, если во WHERE будут ссылки на другие таблицы, при этом не все СУБД поймут это
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.12.2011, 12:41   #9
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

столбцов
Код:
contractid=6
and objectid=37
and datedst
нет в таблице reqvalues!
они находятся в другой таблице request. именно поэтому я добавила inner join!
собственно sql server ругается на эти столбцы, потому что не видит, из какой они таблицы.

т.е. есть таблица reqvalues - содержит всего 2 столбца reqid и value.
в таблице request - datedst,contractid,objectid...

Последний раз редактировалось kate158; 16.12.2011 в 12:46.
kate158 вне форума Ответить с цитированием
Старый 16.12.2011, 12:47   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Тогда так
Код:
update reqvalues
  set value=value*1000
  FROM reqvalues V
  WHERE V.customerid=7 AND V.value<100 AND
    EXISTS(SELECT * FROM request R WHERE R.reqid=V.reqid AND R.contractid=6 AND R.objectid=37 AND D.datedst>='01.01.2011')
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение данных в БД запросом UPDATE Elegance3 Помощь студентам 5 03.12.2011 17:37
Вывод данных в excel - массивом данных sergey113 Помощь студентам 4 22.08.2011 17:16
макрос суммирования данных столбца RECit Microsoft Office Excel 3 11.10.2010 15:14
Условие на UPDATE данных nikta БД в Delphi 4 14.05.2010 15:45
Update данных KiSH333 БД в Delphi 2 01.12.2008 13:28