MySQL更新子查询问题

时间:2009-08-25 22:57:18

标签: mysql

我遇到了使用子查询的更新查询,并且在阅读手册并尝试不同的想法之后无法弄清楚。下面是表&查询。表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);

谢谢, 埃里克

2 个答案:

答案 0 :(得分:0)

由于您使用的是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);

答案 1 :(得分:0)

以下比尔的答案解决了我的问题:

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);