如何在mysql中将单行插入查询重构为多行插入查询?
Posted
技术标签:
【中文标题】如何在mysql中将单行插入查询重构为多行插入查询?【英文标题】:How to refactor a single row insert query into multiple rows insert query in mysql? 【发布时间】:2015-11-16 00:53:17 【问题描述】:我有一个 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】:您可以保留现有的插入,然后执行第二次插入,将表格融合为您想要的格式。具体来说:
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
...
)
将这两个步骤打包到一个事务中。
【讨论】:
嗯-好的,那么“最终”应该是什么?一张新桌子?目标是拥有一个与以前相同但具有不同模式的单端结果表。您是否建议需要两张桌子?那么中间表会是临时表吗? 是从第一个插入将其结果注入的中间表中提取的唯一方法吗?或者是否可以通过从别名拉到当前插入被视为选择子查询与插入来完成上面确定的相同方法? 你提到需要重构为一个三列的表,“final”就是那个表。 我不完全理解你的第二个问题。我想你是在问我答案中的“参数”是否可以是子选择,答案是肯定的,但它可能不会很有效。以上是关于如何在mysql中将单行插入查询重构为多行插入查询?的主要内容,如果未能解决你的问题,请参考以下文章