2010-11-27 3 views
0

Я делаю выбор из таблицы, чтобы заполнить значения для обновления в моей постоянной таблице. MySQL жалуется, что «Неизвестный столбец« rtufu.FollowUpDays »в« списке полей »». Что я делаю неправильно?MySQL пытается обновить таблицу из значений, хранящихся в таблице temp

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 2010-11-27 19:26:42

ответ

0

Внутренние соединения могут быть использованы с обновлениями.

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

Ваш синтаксис запроса немного искалечен. Попробуй это.

+0

ОШИБКА 1242 (21000): Подзапрос возвращает более 1 строки – 2010-11-27 19:50:23

+0

Возможно, вам потребуется добавить MAX() или MIN() вокруг rtufu.FollowUpDays, в зависимости от того, чего вы пытаетесь достичь. – grahamparks 2010-11-27 19:53:54

0

rtufu определяется во внутреннем (ака вложенном) выборе. Он не имеет видимости во внешнем обновлении.

1

Попробуйте это:

update FollowUpTbl as f 
    inner join RowsToUpdateFollowUps as t using (FollowUpID) 
set f.FollowUpDate = DATE_ADD(NOW(), interval t.FollowUpDays DAY);
Смежные вопросы