Обновление таблицы с несколькими значениями из оператора выбора, где совпадает дата - PullRequest
3 голосов
/ 11 августа 2010

У меня проблема с обновлением таблицы, и я уверен, что она довольно прямолинейна, но я собираюсь здесь по кругу кругом.

Данные таблицы 'table1', которые я хочу обновить, отформатированы следующим образом:

[Month]                    Figure
----------------------------------
2010-05-01 00:00:00.000 1.0000
2010-06-01 00:00:00.000 1.0000
2010-07-01 00:00:00.000 1.0000
2010-08-01 00:00:00.000 1.0000

Таблица 'data1', содержащая обновленные цифры, отформатирована следующим образом:

[Month]                    Figure
----------------------------------
2010-05-01 00:00:00.000 0.7212
2010-08-01 00:00:00.000 1.2351

Используемый SQL и сообщение об ошибке выглядят следующим образом.

UPDATE t1
SET t1.figure = (SELECT figure from data1)
FROM table1 t1 JOIN data1 d1
ON (t1.[month] = d1.[month])


Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.

Нужен ли мне цикл while для прохождения каждой строки?

Я бы хотел, чтобы конечный результат был следующим:

[Month]                    Figure
----------------------------------
2010-05-01 00:00:00.000 0.7212
2010-06-01 00:00:00.000 1.0000
2010-07-01 00:00:00.000 1.0000
2010-08-01 00:00:00.000 1.2351

Очень признателен.

Ответы [ 3 ]

5 голосов
/ 11 августа 2010

Для этого вы можете использовать синтаксис UPDATE FROM.

Посмотрите на синтаксис здесь и здесь .

ОТ (table_source)

Указывает, что источник таблицы, представления или производной таблицы используется для предоставить критерии для операции обновления

UPDATE  t1
SET     t1.figure = data1.figure
FROM    t1
        INNER JOIN data1 ON data1.month = t1.month
1 голос
/ 11 августа 2010
UPDATE t1
SET t1.figure = data1.figure 
FROM table1 t1 JOIN data1 d1
ON (t1.[month] = d1.[month])
0 голосов
/ 12 августа 2010

SQL Server 2008:

MERGE INTO Table1
USING data1 AS D1
   ON Table1.my_Month = D1.my_Month
WHEN MATCHED 
   THEN UPDATE 
           SET Figure = D1.Figure;

Pre-SQL Server 2008:

UPDATE Table1
   SET Figure = (
                 SELECT D1.Figure
                   FROM data1 AS D1
                  WHERE Table1.my_Month = D1.my_Month
                )
 WHERE EXISTS (
               SELECT *
                 FROM data1 AS D1
                WHERE Table1.my_Month = D1.my_Month
              );

Обратите внимание, что синтаксис UPDATE..FROM является проприетарным и может давать непредсказуемые результаты, если целевая строка совпадает с болеечем одна исходная строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...