WITH AS连用,也叫做子查询部分
WITH 通常与AS连用,也叫做子查询部分。
用法:
1). 可用来定义一个SQL片断,该片断会被整个SQL语句所用到。
2). 为了让SQL语句的可读性更高
3). 也有可能是在UNION ALL的不同部分,作为提供数据的部分。特别对于UNION ALL比较有
用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本
太高,所以可以使用WITH AS短语,则只要执行一遍即可。
例如:下面两种表达的是同一种意思:
①with alias as (select * from pra)
②select * from pra;
with..as不能嵌套,但可以使用如下代码完成:
t 汇总同一天同一商户同一卡号的交易笔数
b 挑选出t中的多笔交易
c 根据b和商户明细表 组合挑选出需要的字段 (注意 使用join时字段名需要说明是哪张表,由于后期还需要使用b表,所以相关字段必须从b表中获取)
d 直接选取c中的数据
用法:
1). 可用来定义一个SQL片断,该片断会被整个SQL语句所用到。
2). 为了让SQL语句的可读性更高
3). 也有可能是在UNION ALL的不同部分,作为提供数据的部分。特别对于UNION ALL比较有
用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本
太高,所以可以使用WITH AS短语,则只要执行一遍即可。
例如:下面两种表达的是同一种意思:
①with alias as (select * from pra)
②select * from pra;
with..as不能嵌套,但可以使用如下代码完成:
;
with
a
as
(
select
*
from
table_a),
b
as
(
select
*
from
a
where
id
in
(3,4,5))
select
*
from
b
使用实例:从商户交易明细表中挑选出当天同一商户同一卡号发生的多笔交易
with t as (select mt_merchant_id,MT_TRXN_DATE,MT_TRXN_CARD_NO,count(mt_payable_amt) as cnt from cp_mertrx
group by mt_merchant_id,MT_TRXN_DATE,MT_TRXN_CARD_NO order by mt_merchant_id,MT_TRXN_DATE,MT_TRXN_CARD_NO )
,b as ( select mt_merchant_id,MT_TRXN_DATE ,MT_TRXN_CARD_NO from t where t.cnt >1 order by MT_TRXN_DATE )
, c as (select b.MT_TRXN_DATE ,b.mt_merchant_id,b.MT_TRXN_CARD_NO,MT_TRXN_TIME_HHMMSS,MT_TRXN_AMT
from cp_mertrx right join b on cp_mertrx.mt_merchant_id=b.mt_merchant_id and cp_mertrx.MT_TRXN_DATE=b.MT_TRXN_DATE and cp_mertrx.MT_TRXN_CARD_NO=b.MT_TRXN_CARD_NO )
select * from c order by MT_TRXN_DATE ,mt_merchant_id,MT_TRXN_CARD_NO,MT_TRXN_TIME_HHMMSS
t 汇总同一天同一商户同一卡号的交易笔数
b 挑选出t中的多笔交易
c 根据b和商户明细表 组合挑选出需要的字段 (注意 使用join时字段名需要说明是哪张表,由于后期还需要使用b表,所以相关字段必须从b表中获取)
d 直接选取c中的数据