You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在MySQL中能否先使用WITH创建数据集再执行INSERT操作?

MySQL中INSERT结合WITH CTE的可行性

这种操作是可行的,但仅支持MySQL 8.0及以上版本——因为MySQL直到8.0版本才正式引入CTE(公共表表达式)语法。

代码语法说明

你提供的SQL代码语法本身是正确的,如果运行报错,优先检查你的MySQL版本:

SELECT VERSION();

如果版本低于8.0,就会出现不支持WITH子句的错误。

低版本MySQL的替代方案

如果你的MySQL版本不足8.0,可以用以下两种方式实现相同逻辑:

方案1:使用临时表

-- 创建临时表存储Excel数据
CREATE TEMPORARY TABLE stuff (
    external_sku VARCHAR(50),
    retailer VARCHAR(50),
    sku VARCHAR(50),
    cat VARCHAR(50),
    sub_cat VARCHAR(50)
);

INSERT INTO stuff VALUES ('1005-BASE-BLACK', 'PMD WEBSITE', '1005-Base-Black', 'ACCESSORIES', 'Charging Stand');

-- 执行插入(先校验数据是否存在)
INSERT INTO retail_to_internal_sku(retailer, retail_sku, internal_sku, date_added)
SELECT s.retailer, s.external_sku, s.sku, CURDATE()
FROM stuff s
WHERE NOT EXISTS (
    SELECT * FROM retail_to_internal_sku r
    WHERE r.internal_sku = s.sku
      AND r.retail_sku = s.external_sku
      AND r.retailer = s.retailer
);

-- 清理临时表
DROP TEMPORARY TABLE IF EXISTS stuff;

方案2:直接嵌套子查询

INSERT INTO retail_to_internal_sku(retailer, retail_sku, internal_sku, date_added)
SELECT s.retailer, s.external_sku, s.sku, CURDATE()
FROM (
    -- 直接将Excel数据作为子查询
    SELECT '1005-BASE-BLACK' AS external_sku, 'PMD WEBSITE' AS retailer, '1005-Base-Black' AS sku, 'ACCESSORIES' AS cat, 'Charging Stand' AS sub_cat
) s
WHERE NOT EXISTS (
    SELECT * FROM retail_to_internal_sku r
    WHERE r.internal_sku = s.sku
      AND r.retail_sku = s.external_sku
      AND r.retailer = s.retailer
);

内容的提问来源于stack exchange,提问作者canada48978

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:31:43