由於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執行的特別慢,而且大量的時間花費在了大表的查詢上。如何解決這個問題,首先想到是不是由於資料偏移造成的,對應了各種資料偏移的場景,最後認定不是資料偏移造成的。那怎麼辦呢?後來想到用索引!由於對於索引不是特別了解,查了各種資料,...