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

如何正确编写同时包含WITH子句和DROP语句的SQL语句

错误原因

WITH公共表达式(CTE)的语法规则要求它必须直接依附于后续的单个DML语句(SELECT/INSERT/UPDATE/DELETE),不能在WITH和对应DML语句之间插入DROP这类独立语句,这是你当前写法报错的核心原因。

正确实现方式

你只需要把DROP语句单独放在WITH语句之前即可,符合所有支持CTE的数据库语法规范:

-- 先执行删表逻辑
DROP TABLE IF EXISTS TMP.dummy_table;

-- 再执行带CTE的建表查询
WITH cte AS (
    SELECT abc FROM temp1
    UNION ALL
    SELECT abc FROM temp2
)
SELECT cte.abc, tb.id, tb.name
INTO TMP.dummy_table
FROM cte
JOIN tableEmployee tb ON cte.abc = tb.abc;

如果需要保证删表和建表操作的原子性,避免中间执行故障产生数据不一致,可使用事务包裹两个操作(适配支持事务的数据库,如SQL Server、PostgreSQL、MySQL 8.0+等):

BEGIN TRANSACTION;

DROP TABLE IF EXISTS TMP.dummy_table;

WITH cte AS (
    SELECT abc FROM temp1
    UNION ALL
    SELECT abc FROM temp2
)
SELECT cte.abc, tb.id, tb.name
INTO TMP.dummy_table
FROM cte
JOIN tableEmployee tb ON cte.abc = tb.abc;

COMMIT;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:15:03