資料庫 HIVE SQL 用連線操作替代子查詢

2021-09-21 01:23:20 字數 1383 閱讀 7819

由於hql和sql很像,很多功能也通用,所有,有些小夥伴直接把sql的方法套用到hql上,經常遇到各種報錯。這次,小白又發現hql不支援子查詢操作,那麼如何解決這種需求呢?

如下:想把最大年齡的人取出來  這裡如下語句無論是用=或者是in都不支援

select * 

from table

where age =(in) (select max(age) from table)

在hql中會報錯。

這時可以先用子查詢把符合條件的取出,在用left join 或join連線該錶,得到想要的結果。

select b.* 

from (select max(age) as age

from table

) a(left) join table b

on a.age = b.age

結果為:

name

age張三

19如果篩選出課程是17和18的人取出來:

select * 

from table

where age in (select kecheng from tableb

where kecheng in (17,18))

如何替換呢?這時可以用到left semi join

select a.* 

from table a

left semi join tableb b

on a.name = b.name

and b.kecheng in (17,18)

結果:

name

kecheng

李玉18

王五17

李四17

這裡就不能直接用left jion,如果這樣的語句直接用left jion那麼結果會是怎麼樣呢?

select a.* 

from table a

left join tableb b

on a.name = b.name

and b.kecheng in (17,18)

結果為:

name

kecheng

李玉18

王五17

李四17

張三19

如果想用left join這時要把條件放到where中才能達到同樣的效果:

select a.* 

from table a

left join tableb b

on a.name = b.name

where b.kecheng in (17,18)

Hive SQL 之 資料庫

1 hive 中的資料庫本質是乙個目錄,通常資料庫儲存在hive.metastore.warehouse.dir所指定的目錄下,以.db為字尾,例如testdb.db,該資料庫中的表以這個資料庫目錄的子目錄存在。注 default這個資料庫是hive預設的資料庫,若不指定資料庫,這預設使用該資料庫。...

連線資料庫操作

有一段時間沒有寫部落格了,今天我來說說資料庫的連線操作。首先我都知道ado.net這門技術,其實我自己之前也學過幾次,但只學了一點皮毛,跟著老師走也看得懂,但是自己就不會敲出來,前段時間我又在學習這個,也覺得自己這次應該是真的學懂了吧!我們就以mssqlserver為例來講解資料庫連線操作,首先我們...

資料庫 HIVE SQL索引及其使用

最近在用一張8億資料量表作為主表去關聯乙個千萬量級的表時遇到乙個問題,job執行的特別慢,而且大量的時間花費在了大表的查詢上。如何解決這個問題,首先想到是不是由於資料偏移造成的,對應了各種資料偏移的場景,最後認定不是資料偏移造成的。那怎麼辦呢?後來想到用索引!由於對於索引不是特別了解,查了各種資料,...