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

标签 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

我基本上想将多列的插入转置为多行,但它需要是单个整体顶级查询执行,即使嵌套到多个子查询中也是如此。执行此操作我有哪些选择?

最佳答案

您可以保留现有的插入,然后执行第二次插入,将表格融合为您想要的格式。具体来说:

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
...
)

将这两个步骤打包到一个事务中。

关于mysql - 如何在mysql中将单行插入查询重构为多行插入查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33727009/

相关文章:

mysql备份问题

MYSQL:在 CONCAT() 函数中使用列名给出语法错误 1064

sql - 用于数据分析的 NoSQL 或 RDBMS

mysql - 如何检查联合是否已启用

c# - 将 csv 导入 mysql 数据库 - 如何读取带有波兰字符的文件?

php - 从本地主机同步/传输数据库到远程太慢

java - 如何在 MyBatis3 中使用 @SelectProvider 类中的 <foreach> 语句

sql - MySQL - 限制分组依据

php - 如何在 CakePHP 2.4 中设置 AuthComponent 的数据库?

mysql - 用于只读网站的 SQLite 或 MySQL?