hivesql之 table名 with as 轉儲


可能某個子查詢在多個層級多個地方存在重復使用的情況,這個時候我們可以使用 with as 語句將其獨立出來,極大提高SQL可讀性,簡化SQL~ 
注:目前 oracle、sql server、hive等均支持 with as 用法,但 mysql並不支持!

一、介紹

with as 也叫做子查詢部分,首先定義一個sql片段,該sql片段會被整個sql語句所用到,為了讓sql語句的可讀性更高些,作為提供數據的部分,也常常用在union等集合操作中。

with as就類似於一個視圖或臨時表,可以用來存儲一部分的sql語句作為別名,不同的是with as 屬於一次性的,而且必須要和其他sql一起使用才可以!

其最大的好處就是適當的提高代碼可讀性,而且如果with子句在后面要多次使用到,這可以大大的簡化SQL;更重要的是:一次分析,多次使用,這也是為什么會提供性能的地方,達到了“少讀”的目標。

二、使用

WITH t1 AS (
SELECT *
FROM carinfo
), 
t2 AS (
SELECT *
FROM car_blacklist
)
SELECT *
FROM t1, t2


注意:這里必須要整體作為一條sql查詢,即with as語句后不能加分號,不然會報錯。

三、注意事項

1. with子句必須在引用的select語句之前定義,同級with關鍵字只能使用一次,多個只能用逗號分割;最后一個with 子句與下面的查詢之間不能有逗號,只通過右括號分割,with 子句的查詢必須用括號括起來.

以下寫法會報錯:

with t1 as (select * from carinfo)
with t2 as (select * from car_blacklist)
select * from t1,t2
with t1 as (select * from carinfo);
select * from t1

2.如果定義了with子句,但其后沒有跟select查詢(即單獨使用就會報錯),則會報錯!

以下寫法會報錯:

with t1 as (select * from carinfo)

正確寫法(沒有使用 t1沒關系,其后有select就行):

with t1 as (select * from carinfo)
select * from carinfo

3.前面的with子句定義的查詢在后面的with子句中可以使用。但是一個with子句內部不能嵌套with子句!

正確寫法
with t1 as (select * from carinfo),
t2 as (select t1.id from t1)
select * from t2

==========================================================================

搬上一個我沒有看懂的博客:

https://blog.csdn.net/hejisan/article/details/51835279

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM