2009-08-25 86 views
1

我卡在正在使用子查詢和一直無法閱讀手冊,並嘗試不同的想法後弄明白更新查詢。以下是查詢表&查詢。表Temp_2,Temp_3 & Temp_4都有33行,沒有空值。MySQL的更新子查詢問題

有關如何解決此問題的任何想法?

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

感謝, 埃裏克

+0

你的子查詢似乎是專門從temp_2和temp_3中選擇的,而不考慮它在temp_4中更新的內容。這本質上會使temp_4中的所有行都獲得相同的值。你究竟想要做什麼? – VoteyDisciple 2009-08-25 23:01:14

回答

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

比爾 - 謝謝你,這解決了我的問題。我想我的監視器上需要一個註釋,在早晨喝咖啡之前不要對SQL執行任何操作。 問候, 埃裏克 – user163129 2009-08-25 23:58:16

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

太好了,我很高興通過的方式來幫助......,這是習慣在這裏StackOverflow上標註獲獎回答「接受」。 – 2009-08-26 00:15:42

+0

比爾 - 我更新你的答案被接受。這是我第一次提交到網站,我對回覆的質量和速度感到驚喜。 謝謝! – user163129 2009-08-26 00:31:24

+0

謝謝!乾杯! – 2009-08-26 00:43:45