Замена позиций таблицы 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
)