2015-02-03 2 views
1

Я ищу обновить таблицу с новым столбцом, ссылаясь на предыдущую строку в другом столбце.Таблица UPDATE со сменой ID

ID | Fruit | Fruit_prev | 
------------------------- 
1 | Apple |   | 
2 | Orange | Apple  | 
3 | Banana | Orange  | 
4 | Lemon | Banana  | 

Fruit_prev не существует в исходной таблице, и я пытаюсь добавить его в колонке UPDATE.

Моя мысль идет вокруг этого:

UPDATE table SET Fruit_prev = (SELECT Fruit WHERE ID = ID-1); 

однако, это не работает в MYSQL.

Что было бы лучшим способом достичь этого?

+0

Ваше решение будет для меня. Он выполняет свою работу, если мы не говорим о миллионах или даже миллиардах записей. – rxlky

+0

Он будет работать отлично до тех пор, пока заказ ID не сломается. –

+0

Спасибо, код, который я предложил, дает синтаксическую ошибку ... поэтому я прошу о помощи здесь ... – Stan

ответ

2

UPDATE по умолчанию ID:

UPDATE FruitTable AS ft 
INNER JOIN FruitTable AS ft2 
    ON ft.ID - 1 = ft2.ID 
SET ft.Fruit_prev = ft2.Fruit 

UPDATE с +1 сдвигом по любому колонку (это дата колонок здесь):

UPDATE 
Fruit as t0 
INNER JOIN 
    (SELECT ft.*, 
     @rownum := @rownum + 1 AS rank 
    FROM Fruit ft, 
     (SELECT @rownum := 0) r 
    ORDER BY Date) AS t1 
INNER JOIN 
    (SELECT ft.*, 
     @rownum2 := @rownum2 + 1 AS rank 
    FROM Fruit ft, 
     (SELECT @rownum2 := 0) r 
    ORDER BY Date) AS t2 
ON t0.Id = t1.Id AND t1.rank - 1= t2.rank 
SET t0.FruitPrev = t2.Fruit; 

Три таблицы здесь объединены. Первый - defaul, поэтому он может быть обновляемым, вторым и третьим с добавлением рейтинга Date, чтобы они могли быть сдвинуты +1 на это поле rank.

+0

PS: мой предыдущий пример был для sql-сервера, этот пример должен работать для mysql. Пожалуйста, проверь это! –

+0

Спасибо, Иван, попробуем это сразу же, скоро вы узнаете ... – Stan

+0

Кстати, мне нужно, чтобы в схеме был новый столбец («Fruit_prev»), или это будет добавлено как часть " Обновить "? – Stan

Смежные вопросы