MySQL пытается обновить таблицу из значений, хранящихся во временной таблице

0

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

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. Временная таблица, не будет очищена после закрытия сессии?
Теги:
select
temp-tables

4 ответа

0
Лучший ответ

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

UPDATE FollowUpTbl f 
INNER JOIN RowsToUpdateFollowUps rtufu ON rtufu.FollowUpID = f.FollowUpID 
SET f.FollowUpDate = DATE_ADD(
    NOW(), 
    INTERVAL (rtufu.FollowUpDays) DAY
);
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: Извините, я спрошу вас в следующий раз, прежде чем ответить :)
0

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

0

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

UPDATE FollowUpTbl 
  SET 
    FollowUpDate = (
      SELECT
          DATE_ADD(NOW(), INTERVAL (rtufu.FollowUpDays) DAY)
          FROM RowsToUpdateFollowUps rtufu
          WHERE rtufu.FollowUpID = FollowUpTbl.FollowUpID
    );
  • 0
    ОШИБКА 1242 (21000): подзапрос возвращает более 1 строки
  • 0
    Возможно, вам потребуется добавить MAX () или MIN () вокруг rtufu.FollowUpDays, в зависимости от того, чего вы пытаетесь достичь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню