2010-11-27 10 views
0

Ich mache eine Auswahl aus einer Tabelle, um die zu aktualisierenden Werte in meine permanente Tabelle einzugeben. MySQL klagt, dass "Unbekannte Spalte 'rtufu.FollowUpDays' in 'Feldliste'". Was mache ich falsch?MySQL versucht eine Tabelle aus Werten zu aktualisieren, die in einer temporären Tabelle gespeichert sind

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

Zeigen Sie uns das Tabellenschema für FollowUpTbl und RowsToUpdateFollowUps. Ist temporäre Tabelle, wird nicht gelöscht, nachdem Sitzung geschlossen? – ajreal

Antwort

0

Inner Joins mit Updates verwendet werden kann.

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

Ihre Abfrage-Syntax ist ein wenig verstümmelt. Versuche dies.

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

Fehler 1242 (21000): Unterabfrage gibt mehr als 1 Zeile zurück –

+0

Sie müssen möglicherweise eine MAX() oder eine MIN() um die rtufu.FollowUpDays hinzufügen, je nachdem, was Sie erreichen möchten. – grahamparks

0

rtufu ist in der 'inneren' (auch verschachtelten) Auswahl definiert. Es ist nicht sichtbar in der 'äußeren' Aktualisierung.

1

Versuchen Sie folgendes:

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

Du hast mich mit einem Post um ungefähr 20 Sekunden geschlagen. –

+0

@Ben Dauphinee: Sorry, ich werde dich das nächste Mal fragen, bevor du antwortest :) – Danosaure

Verwandte Themen