WITH AS 語法在SQL SERVER 和ORACLE數(shù)據(jù)庫上均支持芹缔,主要用于子查詢弟蚀。語法如下:
WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )
--只有在查詢定義中為所有結(jié)果列都提供了不同的名稱時(shí)偷遗,列名稱列表才是可選的杜耙。
--運(yùn)行 CTE 的語句為:
SELECT <column_list> FROM expression_name;
但其語句在兩個(gè)數(shù)據(jù)庫的應(yīng)用卻有所不同,比如在SQL SERVER 數(shù)據(jù)庫上,這種語法叫做CTE,CTE后面必須直接跟使用CTE的SQL語句(如select、insert炮叶、update、merge等)渡处,否則镜悉,CTE將失效。
但是對(duì)于Oracle數(shù)據(jù)庫而言医瘫,卻有一個(gè)限制比較頭疼侣肄,就是WITH AS后面需要緊跟SELECT語句。那如果需要執(zhí)行MERGE該如何是好呢醇份?
簡單稼锅,將MERGE 語句提前即可。
舉例說明:
MERGE INTO #TEMP1 A
USING (
WITH SUMORDER AS
(SELECT PRODUCTID, SUM(AMOUNT) TOTAL
FROM ORDER GROUP BY PRODUCTID)
SELECT * FROM SUMORDER
) B ON (A.PRODUCTID = B.PRODUCTID)
WHEN MATCHED THEN UPDATE SET A.TOTAL = B.TOTAL;
同理僚纷,適用于其他SQL語句矩距!