无法创建新表时,如何用现有表替代CREATE TABLE AS SELECT操作?
无新表实现原有数据处理逻辑
针对你原来的两个数据处理需求,不需要创建永久新表的替代方案如下:
需求1:筛选cc_aged_cxc_08表中tipo='Equipos'的数据
方案1:创建视图(优先推荐,若DBA允许)
视图是虚拟表,不占用额外存储,与原表数据实时同步:
CREATE VIEW cc_aged_cxc_E_08 AS SELECT * FROM cc_aged_cxc_08 WHERE tipo = 'Equipos';
后续可像操作普通表一样查询该视图,效果和你之前创建的cc_aged_cxc_E_08表完全一致。
方案2:查询时直接嵌套子查询
如果无法创建视图,在需要使用该筛选数据的查询中直接嵌入逻辑:
-- 原查询若为 SELECT * FROM cc_aged_cxc_E_08,替换为以下语句 SELECT * FROM (SELECT * FROM cc_aged_cxc_08 WHERE tipo = 'Equipos') AS temp;
需求2:对cc_aged_cxc_S_08表按trx_number、trx_date分组求和saldo_func
方案1:创建视图
用视图替代永久聚合表:
CREATE VIEW cc_aged_cxc_S_08_1 AS SELECT trx_number, trx_date, SUM(saldo_func) AS saldo_func_sum FROM cc_aged_cxc_S_08 GROUP BY trx_number, trx_date;
方案2:直接使用聚合查询
在需要用到聚合结果的地方,直接执行分组求和语句:
-- 原查询若为 SELECT * FROM cc_aged_cxc_S_08_1,替换为以下语句 SELECT trx_number, trx_date, SUM(saldo_func) AS saldo_func_sum FROM cc_aged_cxc_S_08 GROUP BY trx_number, trx_date;
额外选项:临时表(若DBA允许)
如果DBA禁止永久表但允许临时表,可使用临时表实现——会话结束后临时表自动删除,不占用永久存储:
-- 处理需求1的临时表 CREATE TEMPORARY TABLE cc_aged_cxc_E_08 AS SELECT * FROM cc_aged_cxc_08 WHERE tipo = 'Equipos'; -- 处理需求2的临时表 CREATE TEMPORARY TABLE cc_aged_cxc_S_08_1 AS SELECT trx_number, trx_date, SUM(saldo_func) AS saldo_func_sum FROM cc_aged_cxc_S_08 GROUP BY trx_number, trx_date;
内容的提问来源于stack exchange,提问作者Atreus
相关产品推荐
相关产品推荐

