MySQL Заполнить новый столбец отобранными значениями из одного столбца по условию зависимости от второго столбца
Есть некоторый список тегов transport = ("авто", "пешеход")
Нужно найти элементы этого списка в поле tagname (всегда может быть только один тег), и если такой элемент нашелся, то для каждой строки с тем же productid добавить в новую колонку transport данный элемент
Т.е. из таблицы
| productid | tagname |
|---|---|
| 31 | авто |
| 31 | колесо |
| 50 | пешеход |
| 50 | ботинки |
| 50 | кроссовки |
| 31 | двигатель |
нужно получить следующую таблицу с помощью запроса в MySQL:
| productid | tagname | transport |
|---|---|---|
| 31 | авто | авто |
| 31 | колесо | авто |
| 50 | пешеход | пешеход |
| 50 | ботинки | пешеход |
| 50 | кроссовки | пешеход |
| 31 | двигатель | авто |
Ответы (1 шт):
Автор решения: Anton Shchyrov
→ Ссылка
Вам нужен мультитабличный UPDATE
UPDATE
mytable t,
(
SELECT
productid,
tagname
FROM
mytable
WHERE
tagname IN ('авто', 'пешеход')
) tags
SET
t.transport = tags.tagname
WHERE
t.productid = tags.productid;
Или так
UPDATE
mytable tags
JOIN mytable t ON (
t.productid = tags.productid
)
SET
t.transport = tags.tagname
WHERE
tags.tagname IN ('авто', 'пешеход')
А если вам не нужен UPDATE, а нужен обычный SELECT, так это вообще просто
SELECT
t.productid,
t.tagname,
tags.tagname AS transport
FROM
mytable tags
JOIN mytable t ON (
t.productid = tags.productid
)
WHERE
tags.tagname IN ('авто', 'пешеход')