2010-11-27 20 views
0

私は永久テーブルで更新する値を記入するためにテーブルからselectを実行しています。 MySQLは、 "フィールドリスト 'に" Unknown column' rtufu.FollowUpDays 'という文句があります。私は間違って何をしていますか?MySQLは一時テーブルに格納された値からテーブルを更新しようとしています

UPDATE FollowUpTbl 
    SET 
    FollowUpDate = DATE_ADD(NOW(), INTERVAL (rtufu.FollowUpDays) DAY) 
    WHERE FollowUpID IN (SELECT FollowUpID FROM RowsToUpdateFollowUps rtufu); 

RowsToUpdateFollowUps (Temporary) 
+------------+--------------+ 
| FollowUpID | FollowUpDays | 
+------------+--------------+ 
|  64417 |   90 | 
|  45508 |   90 | 
+------------+--------------+ 

FollowUpTbl 
+--------------+------------+ 
| FollowUpDate | FollowUpID | 
+--------------+------------+ 
| 0000-00-00 |   1 | 
| 0000-00-00 |   2 | 
+--------------+------------+ 
+0

FollowUpTblとRowsToUpdateFollowUpsの表スキーマを表示してください。一時テーブルは、セッションが閉じた後にパージされませんか? – ajreal

答えて

0

インナーアップデートで使用することができ合流します。

UPDATE FollowUpTbl f 
INNER JOIN RowsToUpdateFollowUps rtufu ON rtufu.FollowUpID = f.FollowUpID 
SET f.FollowUpDate = DATE_ADD(
    NOW(), 
    INTERVAL (rtufu.FollowUpDays) DAY 
); 
0

あなたのクエリの構文は少し混乱しています。これを試して。

UPDATE FollowUpTbl 
    SET 
    FollowUpDate = (
     SELECT 
      DATE_ADD(NOW(), INTERVAL (rtufu.FollowUpDays) DAY) 
      FROM RowsToUpdateFollowUps rtufu 
      WHERE rtufu.FollowUpID = FollowUpTbl.FollowUpID 
    ); 
+0

ERROR 1242(21000):サブクエリが1行以上返します –

+0

達成しようとしていることに応じて、rtufu.FollowUpDaysの周りにMAX()またはMIN()を追加する必要があります。 – grahamparks

0

rtufuは「内部」(別名ネストされた)選択で定義されます。それは '外側'の更新で可視性を持っていません。

1

はこれを試してみてください:

update FollowUpTbl as f 
    inner join RowsToUpdateFollowUps as t using (FollowUpID) 
set f.FollowUpDate = DATE_ADD(NOW(), interval t.FollowUpDays DAY);
+0

あなたはポストで約20秒で私を打ち負かす。 –

+0

@Ben Dauphinee:申し訳ありませんが、答える前に次回にお尋ねします:) – Danosaure

関連する問題