[MySql]如何将一行从一个表复制到另一个并填充额外的列?

Posted

技术标签:

【中文标题】[MySql]如何将一行从一个表复制到另一个并填充额外的列?【英文标题】:[MySql]How to copy a row from one table to another and fill additional columns? 【发布时间】:2019-02-06 20:30:34 【问题描述】:

所以我想压缩这个查询,但我不知道该怎么做。

我现在用

$move_to_sold = 
    "INSERT INTO sold_inv_item(
        `sku`,
        `designer`,
        `type`,
        `price`,
        `metal_type`,
        `stone_type`,
        `stone_weight`,
        `item_desc`,
        `item_img`
    )
    SELECT
        `sku`,
        `designer`,
        `type`,
        `price`,
        `metal_type`,
        `stone_type`,
        `stone_weight`,
        `item_desc`,
        `item_img`
    FROM inv_item
    WHERE `sku` = '$sku'";

$add_date_and_name = 
    "UPDATE sold_inv_item 
    SET `purchase_date` = '$date', `customer_name` = '$name' 
    WHERE `sku` = '$sku'";

我想要做的是将一行从一个表复制到另一个,然后将附加数据添加到 $_POST 数据的 2 个额外列中。

我尝试了类似的东西

INSERT INTO sold_inv_item(`sku`,`designer`,`type`,`price`,`metal_type`,
`stone_type`,`stone_weight`,`item_desc`,`item_img`,`purchase_date`,`customer_name`) 

VALUES ((select `sku`,`designer`,`type`,`price`,`metal_type`,
`stone_type`,`stone_weight`,`item_desc`,`item_img` FROM inv_item WHERE inv_item.sku = 'pepsi-2-tone'), '2019-02-14','betty Girl');

这会产生列不匹配错误,我怀疑是因为它试图将所有行放入 1 列而不是将它们分散开来。

最后这可行,但如果可能的话,我宁愿做类似中间解决方案的事情。

INSERT INTO sold_inv_item(`sku`,`designer`,`type`,`price`,`metal_type`,
`stone_type`,`stone_weight`,`item_desc`,`item_img`,`purchase_date`,`customer_name`) 

VALUES ((select `sku` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `designer` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `type` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `price` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `metal_type` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `stone_type` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `stone_weight` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `item_desc` from inv_item where inv_item.sku = 'pepsi-2-tone'),
        (select `item_img` from inv_item where inv_item.sku = 'pepsi-2-tone'),'2019-02-14','betty Girl');

所以最后的问题是,将一行从一个表复制到另一个表并填充其他列的最有效的代码和性能方式是什么。 有一些类似的,但我找不到覆盖超过 1-2 列的复制。

【问题讨论】:

【参考方案1】:

您可以使用INSERT ... SELECT 语法,例如:

INSERT INTO sold_inv_item (
    `sku`,
    `designer`,
    `type`,
    `price`,
    `metal_type`,
    `stone_type`,
    `stone_weight`,
    `item_desc`,
    `item_img`, 
    `purchase_date`, 
    `customer_name`
)
SELECT 
    `sku`,
    `designer`,
     `type`,
     `price`,
     `metal_type`,
     `stone_type`,
     `stone_weight`,
     `item_desc`,
     `item_img`,
     :date,
     :name
FROM inv_item
WHERE `sku` = :sku

PS:在 SQL 查询中使用POSTed 参数时,SO 上的任何人都会强烈建议use prepared statements and parameterized queries,以保护您的代码免受 SQL 注入,并使您的查询更加高效、可读和可维护。我修改了查询以使用命名参数。

【讨论】:

这行得通,我不知道您可以将要直接从中提取的表中不存在的变量添加到选择中。谢谢! 是的,我只是把逻辑搞砸了。当它进入代码时,我会将其转换为准备好的查询。 @Purgedmoon :完全正确。然后,您可以准备一次语句,并根据需要多次重复使用它。

以上是关于[MySql]如何将一行从一个表复制到另一个并填充额外的列?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用特定单词在excel中复制一行并粘贴到另一个excel表?

将数据从一个表复制到另一个表并更改 id [重复]

将一行从一个表复制到另一个

如何根据 MySQL 中第三个表中存在的 id 将数据从一个表复制到另一个表?

如何在同一个表中将数据从一列复制到另一列?

如何从一个DataTable中复制数据行到另一个DataTable中