1 回答

TA貢獻377條經(jīng)驗 獲得超508個贊
你好:
網(wǎng)上有很多,這里我找了一個,你可以看下:
一、with 的用法
With?alias_name?as?(select1)[,alias_namen?as?(select?n)?]--中括號可以省略
Select ….
舉例,如下兩表:
A B
ID NAME ID NAME
1 LI 1 LI
2 QIN 3 SUN
語句如下:
例1
with?test_with?as(select?*?from?A)?select?*?from?B?where?B.id?in(select?id?from?test_with)
例2
with?test_with1?as(select?*?from?A),test_with2?as(select?*?from?B) select?*?from?B?where?B.id?in(select?id?from?test_with1) union?all? select?*?from?test_with2
[@more@]
二、with的相關(guān)總結(jié)
1.使用with子句可以讓子查詢重用相同的with查詢塊,通過select調(diào)用(with子句只能被select查詢塊引用),一般在with查詢用到多次情況下。在引用的select語句之前定義,同級只能定義with關(guān)鍵字只能使用一次,多個用逗號分割。
2.with子句的返回結(jié)果存到用戶的臨時表空間中,只做一次查詢,反復使用,提高效率。
3.在同級select前有多個查詢定義的時候,第1個用with,后面的不用with,并且用逗號隔開。
4.最后一個with 子句與下面的查詢之間不能有逗號,只通過右括號分割,with 子句的查詢必須用括號括起來
5.如果定義了with子句,而在查詢中不使用,那么會報ora-32035 錯誤:未引用在with子句中定義的查詢名。(至少一個with查詢的name未被引用,解決方法是移除未被引用的with查詢),注意:只要后面有引用的就可以,不一定非要在主查詢中引用,比如后面的with查詢也引用了,也是可以的。
6.前面的with子句定義的查詢在后面的with子句中可以使用。但是一個with子句內(nèi)部不能嵌套with子句。
7.當一個查詢塊名字和一個表名或其他的對象相同時,解析器從內(nèi)向外搜索,優(yōu)先使用子查詢塊名字。
8.with查詢的結(jié)果列有別名,引用的時候必須使用別名或*。
望采納!
- 1 回答
- 1 關(guān)注
- 2847 瀏覽
添加回答
舉報