MySQL临时表数据导入及查询SQL编写问题求助
问题排查与修正方案
你的SQL语句无法运行的核心原因是把两个独立的SQL操作(创建临时表、查询临时表)合并成了一条语句,没有正确用分号分隔,同时在临时表索引定义的细节上也可以更规范。
修正后的可运行SQL代码
你可以将两个操作拆分为两条独立语句(用分号分隔),在同一个会话中按顺序执行即可:
-- 第一步:创建带联合索引的临时表并导入目标数据 CREATE TEMPORARY TABLE IF NOT EXISTS pet_temp ( INDEX idx_pet_combo (p_id, e_id, ts) ) AS SELECT p_id, e_id, ts, data1, data2, data3 FROM processes_history WHERE e_id=4362 AND ts BETWEEN '2017-03-01' AND '2017-04-01'; -- 第二步:从临时表中查询指定p_id的行 SELECT p_id, e_id, ts, data1, data2, data3 FROM pet_temp WHERE p_id IN (11,22,33,44,55,66,77,88,99);
关键问题解析
语句分隔错误:
你原代码把CREATE TEMPORARY TABLE和后续的SELECT查询直接拼接在一起,MySQL无法识别这是两个独立的操作,必须用分号;将它们明确分隔开。索引定义优化:
虽然你原写法INDEX(p_id, e_id, ts)在部分环境下能生效,但给索引指定一个清晰的名称(比如idx_pet_combo),后续排查索引性能或维护时会更直观。临时表特性保留:
你提到的临时表随会话结束自动销毁的特性完全没问题,修正后的代码依然遵循CREATE TEMPORARY TABLE的原生逻辑。
如果你的MySQL客户端或脚本支持一次性执行多条语句,直接运行上面的代码即可;如果是单语句执行环境,分开运行这两条语句也能达到目标。
内容的提问来源于stack exchange,提问作者Imnotapotato
相关产品推荐
相关产品推荐

