Замена позиций таблицы sql

Формулировка задания: Поменять местами цвета самой тяжелой и самой легкой детали. Если таких цветов несколько, то выбрать первый по алфавиту.

Таблица p:

|n_det|cvet    |ves|
___________________
|  P1 |Красный |12 |
|  P5 |Синий   |12 |
|  P6 |Красный |19 |
___________________

Если написать select запрос, вопросов не возникает, выборка делается верная:

select 
(CASE WHEN p.ves=  (select max(ves)
                      from p p1                      
       THEN (select p2.cvet cvet1
             from p p2
             order by p2.ves, cvet1
             limit 1
            )
       ELSE (select p4.cvet cvet2
             from p p4
             order by p4.ves desc, cvet2
             limit 1
            )
       END
), n_det
from p
WHERE p.ves IN (select min(ves)
                 from p p6      
               )
OR p.ves = (select max(ves)
              from p p7 
           )

Стоит использовать update, вместо select, результат начинает выдаваться рандомный:

update p set cvet = 
(CASE WHEN p.ves=  (select max(ves)
                      from p p1      
                   )
      THEN (select p2.cvet cvet1
            from p p2
            order by p2.ves, cvet1
            limit 1
           )
      ELSE (select p4.cvet cvet2
            from p p4
            order by p4.ves desc, cvet2
            limit 1
           )
END)
WHERE p.ves IN (select min(ves)
                  from p p6      
               )
OR p.ves = (select max(ves)
              from p p7 
           )

Ответы (0 шт):