WITH AS連用,也叫做子查詢部分

2021-08-20 13:21:16 字數 1817 閱讀 7167

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不能巢狀,但可以使用如下**完成:

;withaas(select*fromtable_a),bas(select*fromawhereidin(3,4,5))

select*fromb

使用例項:從商戶交易明細表中挑選出當天同一商戶同一卡號發生的多筆交易

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中的資料

typedef 與 指標連用

typedef struct lnodelnode,linklist int listinsert l linklist l,int i,int e if p j i 1 return 0 s lnode malloc sizeof lnode if s return 0 s data e s ne...

if else連用時的陷阱

近日,在實現 the c programing language 上的乙個練習題時,寫出了下面一段 for i left 1 i right i 本意是第乙個 if 和 else 相匹配,但是為了 簡潔,效仿 tcpl 上的普遍做法,省略掉了花括號,結果卻忽視了if else語句的結合規則,導致el...

SQL語句 with as 用法

一直以來很少在sql中使用過with as 的用法,現在打算記錄這條語句的使用方法。with as短語,也叫做子查詢部分 subquery factoring 是用來定義乙個sql片斷,該sql片斷會被整個sql語句所用到。這個語句算是公用表表示式 cte 比如 with a as select f...