2015-11-16 3 views
1

У меня есть запрос на вставку MySQL, который в настоящее время вставляет значения параметров одной строки для данного элемента id. Мне нужно реорганизовать его так, чтобы он вставлял несколько строк таблицы соединений, по одному для каждого параметра, где имя и значение параметра и вставлено для каждой строки вместо одной строки.Как реорганизовать запрос вставки одной строки в несколько строк вставить запрос в mysql?

В текущем запросе есть сложные подзапросы, которые я опускаю здесь в этом упрощенном примере ниже. Моя цель состоит в том, чтобы иметь возможность реорганизовать верхнюю часть и оставить подзапросы такими, какими они есть, если это означает, что она обертывает новый верхний уровень вокруг всего, что хорошо.

INSERT INTO parameters (
    item_id 
    category, 
    color, 
    size, 
    weight, 
    pressure, 
    price) 
(
    SELECT * FROM (
     SELECT 
      item_id 
      c_from_box AS category_id, 
      c_from_pack AS color, 
      s_from_ship AS size, 
      w_from_ship AS weight, 
      p_from_box AS pressure, 
      p_from_acc AS price 
     FROM 
      FROM_PART_NUMBER_SUBQUERY 
     WHERE 
      WHERE_LOGIC_FOR_SUBQUERY 
     ) 
    WHERE 
     SOME_OTHER_WHERE_LOGIC 
) 

мне нужно реорганизовать его так, вместо таблицы параметров, имеющую столбец для параметра, его столбец для идентификатора параметра. Таким образом, вместо этого:

item_id 
    category, 
    color, 
    size, 
    weight, 
    pressure, 
    price 

это

item_id 
    parameter_id, value 

где parameter_ids являются возможности соответствующих имен параметров (имя и идентификатор из другой таблицы):

category, // parameter_id: 1 
    color, // parameter_id: 2 
    size,  // parameter_id: 3 
    weight, // parameter_id: 4 
    pressure, // parameter_id: 5 
    price  // parameter_id: 6 

Я по существу хотите переставить вставку нескольких столбцов в несколько строк, но это должно быть одно общее выполнение запроса верхнего уровня, даже если оно вложено в несколько подзапросов. Каковы мои варианты для этого?

ответ

0

Вы можете сохранить вставку, которую вы имеете, а затем выполнить вторую вставку, которая тает таблицу в желаемый формат. В частности:

insert into final (item_id, parameter_id, value) 
(
select item_id, 1, category from parameters 
union all 
select item_id, 2, color from parameters 
union all 
... 
) 

Пакет обоих шагов в одну транзакцию.

+0

Хм - хорошо, так что же такое «окончательный»? Новая таблица? Цель состояла в том, чтобы получить итоговую таблицу с одним конечным результатом так же, как и раньше, но только с другой схемой. Вы предлагаете использовать две таблицы? Будет ли промежуточная таблица временной таблицей? – Streamline

+0

Это единственный способ сделать это, чтобы вытащить из промежуточной таблицы, в которую первая вставка вводит свои результаты? Или можно было бы сделать такой же подход, описанный выше, путем вытаскивания из псевдонима в текущую вставку, которая обрабатывается как подзапрос select и insert? – Streamline

+0

Вы упомянули о необходимости реорганизации в таблицу с тремя столбцами, «final» - это та таблица. – patrickmdnet

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