MySQL 5.6中不使用临时表能否在SELECT中直接使用值列表查询
MySQL 5.6 无临时表实现方案
你可以直接通过UNION ALL构造内联值列表的派生表来替代临时表,完全不需要创建临时表、插入数据的额外步骤,适配MySQL 5.6版本的查询语句如下:
SELECT t.term, rt.description, rt.soundex FROM realtable rt JOIN ( SELECT 'brocoli' AS term, SOUNDEX('brocoli') AS soundexterm UNION ALL SELECT 'rice' AS term, SOUNDEX('rice') AS soundexterm UNION ALL SELECT 'aple' AS term, SOUNDEX('aple') AS soundexterm ) t ON t.soundexterm = rt.soundex;
说明
- 你原查询存在别名笔误:子查询别名定义为
t,但后续关联和取值错误使用了tt,上述语句已修正该问题 - 派生表内的每一行
SELECT对应你原本要插入临时表的一条记录,UNION ALL将多条记录拼接为虚拟表,和realtable关联的逻辑和你原逻辑完全一致 - 最终返回结果和你使用临时表的查询结果完全相同,和你给出的示例输出无差异
内容的提问来源于stack exchange,提问作者Stephen Gilboy
相关产品推荐
相关产品推荐

