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