SQL小技巧——UNION ALL/UNION创建临时表

目录

一、前言

二、UNION ALL实现临时表功能

1. 需求描述

2. SQL形式

三、总结


一、前言

我们都知道,在SQL中,UNION ALL / UNION的作用是将多个 SELECT 语句的结果合并成一个结果集,常见的使用场景是作为查询结果的拼接,比如下列语句,但实际上,UNION ALL / UNION也可以实现类似于创建临时表的功能。

SELECT column1 FROM table1 WHERE column1 >10UNIONALLSELECT column1 FROM table2 WHERE column1 <5;

二、UNION ALL实现临时表功能

1. 需求描述

因为公司生产和测试的数据库表有点差异,导致在测试上的SQL因为生产上表的缺失执行不了,询问前辈后可以将缺失的表写成临时表的形式,但该方式仅限于缺失的表或要替换的表的记录比较少且用到的记录固定不更改的情况。

2. SQL形式
  • 子查询的形式
SELECT p.product_name, SUM(s.sale) sale FROM sales s
LECT JOIN (SELECT product_name, p_id 
           FROM product
           WHERE1=1AND s.date >='2023-12-01 00:00:00'AND s.date <='2023-12-31 23:59:59' ) p
ON p.p_id = s.p_id
GROUPBY product_name
ORDERBY sale

  • 临时表的形式
SELECT p.product_name, SUM(s.sale) sale FROM sales s
LECT JOIN (SELECT'chocolate'AS product_name, '101'AS p_id UNIONALLSELECT'strawberry'AS product_name, '101'AS p_id UNIONALLSELECT'vanilla'AS product_name, '101'AS p_id UNIONALLSELECT'caramel'AS product_name, '101'AS p_id 
           FROM product ) p
ON p.p_id = s.p_id
GROUPBY product_name
ORDERBY sale

当然,上述临时表的形式也可以使用WITH语句实现,如果数据库的版本支持的话。

三、总结

本文只是给出了一非常简单的例子,在实际的使用中可以根据情况再进行优化,但前提是替换的子查询的表所需的记录较少且固定,那么这个前提下一般不会替换业务表,可能是一些固定的对照表比如操作的n中情况的记录表等等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值