使用OUTER JOIN将mysql SELECT转换为UPDATE

时间:2012-01-31 01:15:03

标签: mysql join

我正在尝试更新包含股票定价信息的表格,以包含这些股票的回报,如果持有不同的时间段。返回在时间段开始时插入。 以下SELECT语句计算我正在查找的值,包含3个月和6个月的保留期。该表格为price_returns

SELECT 
      curr.date, curr.company, curr.price,
      (mo3.price - curr.price)/curr.price AS 3MONTH_RETURN,
      (mo6.price - curr.price)/curr.price AS 6MONTH_RETURN
FROM 
     price_returns AS curr
LEFT OUTER JOIN 
       price_returns AS mo3
    ON 
       ((curr.date = LAST_DAY(mo3.date - INTERVAL 3 MONTH)) AND (curr.company = mo3.company))
LEFT OUTER JOIN 
       price_returns AS mo6
    ON 
      ((curr.date = LAST_DAY(mo6.date - INTERVAL 6 MONTH)) AND (curr.company = mo6.company))
Order by 
      curr.company, curr.date;

我想将此SELECT转换为UPDATE到表price_returns中,并将3MONTH_RETURN6MONTH_RETURN插入列ret_3mth和{ {1}}。

这就是我所拥有的,但它没有正确执行更新。该连接似乎正在工作,因为它匹配正确的行数,但它不会更改任何行。

*更新*

不确定原因,但下面的代码现在似乎正在运行。对困惑感到抱歉。我还没有弄清楚发生了什么,为什么不是,但现在正在发挥作用。用户错误我确定。

*更新*

ret_6mth

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用子查询(http://dev.mysql.com/doc/refman/5.0/en/subqueries.html)执行此操作

UPDATE price_returns SET curr.ret_3mth = (SELECT (mo3.price - curr.price)/curr.price in here with the join), 
curr.ret_6mth = (Select (mo6.price - curr.price)/curr.price in here with the join)

所以在括号中有子查询,你将通过上面的整个选择代码(第一个mysql代码)