3表join

import polars as pl
import duckdb

# 創(chuàng)建示例 DataFrame
df1 = pl.DataFrame({
    "id": [1, 2, 4, 5],
    "left_id": [101, 102, 103, 104],
    "right_id": [201, 202, 203, 105] 
})
df2 = pl.DataFrame({
    "id": [101, 102, 103, 104,201, 202, 203, 204],
    "idid": [101, 102, 103, 104,201, 202, 203, 204]
})

conn = duckdb.connect(database=':memory:')
# conn.sql("""
#         select a.id,a.left_id,b.idid as lidid, a.right_id,c.idid as ridid
#         from df1 a,df2 b,df2 c
#         where a.left_id=b.id or a.right_id=c.id
# """).show()
        

t1 = conn.sql("""
        select a.id,a.left_id,b.idid as lidid 
        from df1 a join df2 b on a.left_id=b.id 
""") 
# conn.sql("""
#         select * from t1
# """).show()

t2 = conn.sql("""
        select a.id,a.right_id,b.idid as ridid 
        from df1 a join df2 b on a.right_id=b.id 
""") 

# conn.sql("""
#         select * from t2
# """).show()

conn.sql("""
        select a.id,a.left_id,a.lidid,b.right_id,b.ridid
        from t1 a join t2 b on a.id=b.id 
""").show()
┌───────┬─────────┬───────┬──────────┬───────┐
│  id   │ left_id │ lidid │ right_id │ ridid │
│ int64 │  int64  │ int64 │  int64   │ int64 │
├───────┼─────────┼───────┼──────────┼───────┤
│     1 │     101 │   101 │      201 │   201 │
│     2 │     102 │   102 │      202 │   202 │
│     4 │     103 │   103 │      203 │   203 │
└───────┴─────────┴───────┴──────────┴───────┘

conn.sql("""
        select a.id,a.left_id,a.lidid,b.right_id,b.ridid
        from t1 a full join t2 b on a.id=b.id 
""").show()

┌───────┬─────────┬───────┬──────────┬───────┐
│  id   │ left_id │ lidid │ right_id │ ridid │
│ int64 │  int64  │ int64 │  int64   │ int64 │
├───────┼─────────┼───────┼──────────┼───────┤
│     1 │     101 │   101 │      201 │   201 │
│     2 │     102 │   102 │      202 │   202 │
│     4 │     103 │   103 │      203 │   203 │
│     5 │     104 │   104 │     NULL │  NULL │
└───────┴─────────┴───────┴──────────┴───────┘


conn.sql("""
        select a.id,a.left_id,b.idid as lidid, a.right_id,c.idid as ridid
        from df1 a,df2 b,df2 c
        where a.left_id=b.id and a.right_id=c.id
""").show()

┌───────┬─────────┬───────┬──────────┬───────┐
│  id   │ left_id │ lidid │ right_id │ ridid │
│ int64 │  int64  │ int64 │  int64   │ int64 │
├───────┼─────────┼───────┼──────────┼───────┤
│     1 │     101 │   101 │      201 │   201 │
│     2 │     102 │   102 │      202 │   202 │
│     4 │     103 │   103 │      203 │   203 │
└───────┴─────────┴───────┴──────────┴───────┘
conn.sql("""
        select a.id,a.left_id,b.idid as lidid, a.right_id,c.idid as ridid
        from df1 a 
        join df2 b on a.left_id=b.id 
        join df2 c on a.right_id=c.id
""").show()
┌───────┬─────────┬───────┬──────────┬───────┐
│  id   │ left_id │ lidid │ right_id │ ridid │
│ int64 │  int64  │ int64 │  int64   │ int64 │
├───────┼─────────┼───────┼──────────┼───────┤
│     1 │     101 │   101 │      201 │   201 │
│     2 │     102 │   102 │      202 │   202 │
│     4 │     103 │   103 │      203 │   203 │
└───────┴─────────┴───────┴──────────┴───────┘

conn.sql("""
        select a.id,a.left_id,b.idid as lidid, a.right_id,c.idid as ridid
        from df1 a 
        inner join df2 b on a.left_id=b.id 
        inner join df2 c on a.right_id=c.id
""").show()
┌───────┬─────────┬───────┬──────────┬───────┐
│  id   │ left_id │ lidid │ right_id │ ridid │
│ int64 │  int64  │ int64 │  int64   │ int64 │
├───────┼─────────┼───────┼──────────┼───────┤
│     1 │     101 │   101 │      201 │   201 │
│     2 │     102 │   102 │      202 │   202 │
│     4 │     103 │   103 │      203 │   203 │
└───────┴─────────┴───────┴──────────┴───────┘

COALESCE

conn.sql("""
        select COALESCE(a.id, b.id) AS id,a.left_id,a.lidid,b.right_id,b.ridid
        from t1 a full join t2 b on a.id=b.id 
""").show()

pre,cur,next

import polars as pl
import duckdb

# 創(chuàng)建示例 DataFrame
df1 = pl.DataFrame({
    "id": [1, 2, 4, 5],
    "in_id": [101, 102, 103, 104],
    "out_id": [102, 103, 104, 105] 
})
df2 = pl.DataFrame({
    "id": [101, 102, 103, 104,105, 106, 107, 108],
    "idid": [101, 102, 103, 104,201, 202, 203, 204]
})

conn = duckdb.connect(database=':memory:')
conn.sql("""
    select b.in_id as pre_id,a.id as cur_id,c.out_id as next_id
    from df2 a, df1 b,df1 c
    where a.id=b.out_id and a.id=c.in_id
""").show()

┌────────┬────────┬─────────┐
│ pre_id │ cur_id │ next_id │
│ int64  │ int64  │  int64  │
├────────┼────────┼─────────┤
│    101 │    102 │     103 │
│    102 │    103 │     104 │
│    103 │    104 │     105 │
└────────┴────────┴─────────┘

DISTINCT ON Clause

                t2 = duckdb_conn.sql(f"""
                    select distinct on (lane_id,lbound_id) * from t1
                """)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末暂题,一起剝皮案震驚了整個(gè)濱河市敢靡,隨后出現(xiàn)的幾起案子啸胧,更是在濱河造成了極大的恐慌,老刑警劉巖纺念,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陷谱,死亡現(xiàn)場(chǎng)離奇詭異烟逊,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)乔宿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門详瑞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)坝橡,“玉大人精置,你說(shuō)我怎么就攤上這事∷浅#” “怎么了狼讨?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵政供,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我离陶,道長(zhǎng)衅檀,這世上最難降的妖魔是什么招刨? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任打却,我火速辦了婚禮谎倔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘片习。我一直安慰自己,他們只是感情好状知,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布试幽。 她就那樣靜靜地躺著卦碾,像睡著了一般洲胖。 火紅的嫁衣襯著肌膚如雪坯沪。 梳的紋絲不亂的頭發(fā)上腐晾,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音淹冰,去河邊找鬼巨柒。 笑死洋满,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的牺勾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼袱饭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼呛占!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起晾虑,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤糙捺,失蹤者是張志新(化名)和其女友劉穎笙隙,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竟痰,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铅檩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年昧旨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兔沃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乒疏,死狀恐怖缰雇,靈堂內(nèi)的尸體忽然破棺而出追驴,到底是詐尸還是另有隱情,我是刑警寧澤暇咆,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布爸业,位于F島的核電站,受9級(jí)特大地震影響扯旷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜毯炮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一耸黑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧为迈,春花似錦葫辐、人聲如沸男翰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)租冠。三九已至薯嗤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骆姐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留带射,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓绪钥,卻偏偏與公主長(zhǎng)得像关炼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寸潦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容