WITH AS 語法在SQL SERVER 和ORACLE數據庫上均支持,主要用於子查詢。語法如下:
WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )
--只有在查詢定義中為所有結果列都提供了不同的名稱時,列名稱列表才是可選的。
--運行 CTE 的語句為:
SELECT <column_list> FROM expression_name;
但其語句在兩個數據庫的應用卻有所不同,比如在SQL SERVER 數據庫上,這種語法叫做CTE,CTE后面必須直接跟使用CTE的SQL語句(如select、insert、update、merge等),否則,CTE將失效。
但是對於Oracle數據庫而言,卻有一個限制比較頭疼,就是WITH AS后面需要緊跟SELECT語句。那如果需要執行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語句!