MySQL Update Subquery проблема - PullRequest
       1

MySQL Update Subquery проблема

1 голос
/ 26 августа 2009

Я застрял в запросе на обновление, использующем подзапрос, и не смог выяснить его после прочтения руководства и пробования различных идей. Ниже таблица и запрос. Таблицы Temp_2, Temp_3 и Temp_4 содержат 33 строки и не имеют нулевых значений.

Есть идеи, как решить эту проблему?

CREATE  TABLE  temp_2 (
    date_value date default NULL, 
    close_adj_value_1 double default NULL);

CREATE  TABLE  temp_3 (
    date_value date default NULL, 
    first_close_adj_value_1 double default NULL);

CREATE  TABLE temp_4 (
    date_value date default NULL,
    pct_return_1 double default NULL);

INSERT INTO temp_4 (date_value) SELECT date_value FROM temp_2;

UPDATE  temp_4
SET     pct_return_1 = 
    (SELECT ((temp_2.close_adj_value_1 / temp_3.first_close_adj_value_1) - 1)
    FROM        temp_2,temp_3
    WHERE temp_2.date_value = temp_3.date_value);

Спасибо, Eric

Ответы [ 2 ]

0 голосов
/ 26 августа 2009

Ответ Билла, показанный ниже, решил мою проблему:

INSERT INTO temp_4 (date_value, pct_return_1)
  SELECT temp_2.date_value, 
    (temp_2.close_adj_value_1 / temp_3.first_close_adj_value_1) - 1
  FROM temp_2 JOIN temp_3 USING (date_value);
0 голосов
/ 26 августа 2009

Поскольку вы используете MySQL, вы можете использовать его многотабличный синтаксис UPDATE:

UPDATE temp_4
 JOIN temp_2 USING (date_value)
 JOIN temp_3 USING (date_value)
SET temp_4.pct_return_1 = (temp_2.close_adj_value_1 /
                           temp_3.first_close_adj_value_1) - 1;

Я предполагаю, что вы хотите использовать столбец date_value, чтобы сопоставить строки в temp_4 со строками в других таблицах.

Альтернативное решение, которое вы можете использовать, - вставить все значения в пустую таблицу temp_4 за один раз:

INSERT INTO temp_4 (date_value, pct_return_1)
  SELECT temp_2.date_value, 
    (temp_2.close_adj_value_1 / temp_3.first_close_adj_value_1) - 1
  FROM temp_2 JOIN temp_3 USING (date_value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...