2009-08-25 9 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_4で何が更新されているかに関係なく、temp_2とtemp_3から特に選択されているようです。これにより、temp_4のすべての行が本質的に同じ値になります。あなたは何をしようとしているのですか? – VoteyDisciple

答えて

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で何もしないようにモニターにメモが必要だと思う。 よろしく、 Eric – user163129

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でここで慣習的です。 –

+0

Bill - あなたの回答を受け入れられるように更新しました。これはサイトへの最初の提出であり、私は応答の質とスピードにうれしく驚いていました。 ありがとう! – user163129

+0

ありがとうございました!乾杯! –