【问题标题】:Import values from temporary table to another table?将临时表中的值导入另一个表?
【发布时间】:2021-03-24 13:18:39
【问题描述】:

我要加入 3 张桌子:

SELECT 
catalog_product_entity.entity_id AS product_id,
catalog_product_entity.sku,
customer_entity_varchar.entity_id AS customer_id,
customer_entity_varchar.value,
customer_entity_varchar.attribute_id,
import_tmp.customer,
import_tmp.grp,
import_tmp.qty,
import_tmp.price
FROM catalog_product_entity
    INNER JOIN import_tmp 
    ON catalog_product_entity.sku = import_tmp.sku
    INNER JOIN customer_entity_varchar 
    ON import_tmp.customer = customer_entity_varchar.value OR import_tmp.grp = customer_entity_varchar.value
    WHERE customer_entity_varchar.attribute_id = 139 OR customer_entity_varchar.attribute_id = 140

目前,我正在获取数据,构建一个新数组并将其插入到我的最终表格中。

INSERT INTO final_table(`c_id`, `p_id`, `price`) VALUES (customer_id, product_id, price);

不过,我想知道是否可以一次性完成,所以基本上直接从临时表中完成?

【问题讨论】:

  • 有一个 ANSI SQL 方法,您可以查看stackoverflow.com/questions/25969/… ...不过请注意。确保首先在生产环境之外完成此操作。将所有表的一部分克隆到本地数据库或安全的地方。永远不要在生产环境中直接运行这样的东西。

标签: php mysql sql mariadb


【解决方案1】:

是的。使用INSERT . . . SELECT:

INSERT INTO final_table (c_id, p_i`, price)
    SELECT cev.entity_id AS customer_id,
           cpe.entity_id AS product_id,
           it.price
    FROM catalog_product_entity cpe JOIN
         import_tmp it
         ON cpe.sku = it.sku JOIN
         customer_entity_varchar cev
         ON cev.value IN (it.customer, it.grp)
    WHERE cev.attribute_id IN (139, 140);

请注意,我介绍了表别名。这些使查询更易于编写和阅读。而且IN 比重复OR 条件更容易遵循。

【讨论】:

  • 只有一个后续问题,以备不时之需。是否可以将 ... SELECT 插入 2 个表?所以基本上进入了 final_table_A 和 final_table_B ?
  • @hardy123480 。 . . MySQL 不支持在一张INSERT 中插入两张表。
【解决方案2】:
INSERT INTO final_table(`c_id`, `p_id`, `price`) 

SELECT 
customer_entity_varchar.entity_id AS customer_id,
catalog_product_entity.entity_id AS product_id,
import_tmp.price
FROM catalog_product_entity
    INNER JOIN import_tmp 
    ON catalog_product_entity.sku = import_tmp.sku
    INNER JOIN customer_entity_varchar 
    ON import_tmp.customer = customer_entity_varchar.value OR import_tmp.grp = customer_entity_varchar.value
    WHERE customer_entity_varchar.attribute_id = 139 OR customer_entity_varchar.attribute_id = 140

上面的代码会做到这一点。只需选择要插入 final_table 的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-08
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    相关资源
    最近更新 更多