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;

SQL Fiddle

Или так

UPDATE
  mytable tags
  JOIN mytable t ON (
    t.productid = tags.productid
  )
SET
  t.transport = tags.tagname
WHERE
  tags.tagname IN ('авто', 'пешеход')

SQL Fiddle


А если вам не нужен 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 ('авто', 'пешеход')

SQL Fiddle

→ Ссылка