如何将单行插入查询重构为多行在mysql中插入查询?

时间:2015-11-16 00:53:17

标签: mysql sql

我有一个MySQL插入查询,当前为给定的项ID插入单行的参数值。我需要重构它,以便它插入连接表的多行,每个参数对应一个参数名称和值,并插入每行而不是单行。

当前查询具有复杂的子查询,我在下面的简化示例中省略了这些子查询。我的目标是能够重构顶部并保留子查询,如果它意味着在所有部分周围包裹一个新的顶层就可以了。

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
) 

我需要重构它,而不是带有参数列的参数表,而是参数id的列。所以不要这样:

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

它是

item_id
    parameter_id, value

其中parameter_ids是相应参数名称(来自另一个表的名称和id)的可能性:

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

我基本上希望将多列的插入转换为多行,但即使嵌套到多个子查询中,它也需要是单个整体顶级查询执行。我有什么选择呢?

1 个答案:

答案 0 :(得分: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
...
)

将两个步骤打包成一个单独的交易。