国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Full Join多個表與Union All多個表

這篇具有很好參考價值的文章主要介紹了Full Join多個表與Union All多個表。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 問題描述

在Hive中(其他類似SQL,比如PostgreSQL可能也存在此問題),當對多張表(3張及以上)進行full join時,會存在每張表的主鍵都是唯一,但當full join后,會發(fā)現(xiàn)主鍵可能有重復。

2. 問題復現(xiàn)

2.1. 插入數(shù)據(jù)

with   temp1 as (
select  '1' as id ,'張三' as name
union all 
select  '2' as id ,'李四' as name
union all 
select  '3' as id ,'王五' as name
),
temp2 as (
select  '1' as id ,'深圳' as city
union all 
select  '3' as id ,'北京' as city
union all 
select  '4' as id ,'上海' as city
),
temp3 as (
select  '1' as id ,'5000' as salary
union all 
select  '4' as id ,'10000' as salary
union all 
select  '5' as id ,'12000' as salary
)

2.2. 查詢SQL以及問題

select
    coalesce(a.id, b.id, c.id) as id
    , a.name
    , b.city
    , c.salary
from temp1 as a
 
full join temp2 as b
on a.id = b.id
 
full join temp3 as c
on a.id = c.id

當執(zhí)行如上查詢SQL時,會發(fā)現(xiàn)其中 id = 4 的數(shù)據(jù)有重復,如下圖所示:
full join 多張表,大數(shù)據(jù)系列三,數(shù)據(jù)庫,sql,hive

3. 問題原因

之所以會出現(xiàn)這樣的問題,是因為是以a表為主表,但a表中只有 id 為 1、2、3 的數(shù)據(jù),但在b表中有id為4,c表中也有id為4,此時full join時,a表會以空值和b表、c表中id為4的數(shù)據(jù)join,這樣關聯(lián)后的表中就會出現(xiàn)2條id為4的數(shù)據(jù);

4. 問題解決

在后續(xù)的表full join時,不單單使用第一張表的主鍵full join(因為是full join,所以肯定會存在第一張表為null,而其他表有值的數(shù)據(jù)),而使用 coalesce 方法對所有前面已經(jīng)full join了的主鍵進行條件關聯(lián),如下代碼:
方法1:

select
    coalesce(a.id, b.id, c.id) as id
    , a.name
    , b.city
    , c.salary
from temp1 as a
 
full join temp2 as b
on a.id = b.id
 
full join temp3 as c
on coalesce(a.id, b.id) = c.id

結果如下:
full join 多張表,大數(shù)據(jù)系列三,數(shù)據(jù)庫,sql,hive
方法2:

select 
    temp.id
    , temp.name
    , temp.city
    , c.salary
from  
(select
    coalesce(a.id, b.id) as id
    , a.name 
    , b.city 
from temp1 as a
 
full join temp2 as b
on a.id = b.id) temp
full join 
temp3 as c
on temp.id = c.id

full join 多張表,大數(shù)據(jù)系列三,數(shù)據(jù)庫,sql,hive
方法3:

select 
temp.id 
,temp1.name
,temp2.city
,temp3.salary
from 
(select id 
from  
(select 
id
from  temp1
union all 
select 
id
from  temp2
union all 
select 
id
from  temp3
) tt
group by id
) temp 
left  join temp1  
on temp.id = temp1.id
left  join temp2  
on temp.id = temp2.id
left  join temp3 
on temp.id = temp3.id

full join 多張表,大數(shù)據(jù)系列三,數(shù)據(jù)庫,sql,hive文章來源地址http://www.zghlxwxcb.cn/news/detail-599612.html

到了這里,關于Full Join多個表與Union All多個表的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【SQL開發(fā)實戰(zhàn)技巧】系列(三十五):數(shù)倉報表場景?根據(jù)條件返回不同列的數(shù)據(jù)以及Left /Full Join注意事項

    【SQL開發(fā)實戰(zhàn)技巧】系列(一):關于SQL不得不說的那些事 【SQL開發(fā)實戰(zhàn)技巧】系列(二):簡單單表查詢 【SQL開發(fā)實戰(zhàn)技巧】系列(三):SQL排序的那些事 【SQL開發(fā)實戰(zhàn)技巧】系列(四):從執(zhí)行計劃討論UNION ALL與空字符串UNION與OR的使用注意事項 【SQL開發(fā)實戰(zhàn)技巧】系列

    2023年04月12日
    瀏覽(38)
  • SQL FULL OUTER JOIN 關鍵字:左右表中所有記錄的全連接解析

    SQL FULL OUTER JOIN 關鍵字:左右表中所有記錄的全連接解析

    SQL RIGHT JOIN返回右表(table2)中的所有記錄以及左表(table1)中的匹配記錄。如果沒有匹配,則左側的結果為0條記錄。 注意:在某些數(shù)據(jù)庫中,RIGHT JOIN被稱為RIGHT OUTER JOIN。 在本教程中,我們將使用著名的Northwind示例數(shù)據(jù)庫。 以下是“Orders”表的部分選擇: OrderID C

    2024年02月05日
    瀏覽(18)
  • Flink-多流轉換(Union、Connect、Join)

    Flink-多流轉換(Union、Connect、Join)

    無論是基本的簡單轉換和聚合,還是基于窗口的計算,我們都是針對一條流上的數(shù)據(jù)進行處理的。而在實際應用中,可能需要將不同來源的數(shù)據(jù)連接合并在一起處理,也有可能需要將一條流拆分開,所以經(jīng)常會有對多條流進行處理的場景。 簡單劃分的話,多流轉換可以分為“

    2024年02月14日
    瀏覽(28)
  • SQLite學習(七)SQLite的HAVING、DISTINCT、JOIN、UNION子句語法和應用

    在上一篇《SQLite學習(六)SQLite的GLOB、LIMIT、ORDER、GROUP UP子句語法和應用》 中,講解了 SQLite的GLOB、LIMIT、ORDER、GROUP UP 子句語法,在本篇博客中,將繼續(xù)講解 SQLite 子句的基本語法。 同學們將學習到: SQLite HAVING 子句語法 SQLite DISTI

    2024年02月06日
    瀏覽(20)
  • 【postgresql 基礎入門】多表聯(lián)合查詢 join與union 并,交,差等集合操作,兩者的區(qū)別之處

    ? 專欄內(nèi)容 : postgresql內(nèi)核源碼分析 手寫數(shù)據(jù)庫toadb 并發(fā)編程 ? 開源貢獻 : toadb開源庫 個人主頁 :我的主頁 管理社區(qū) :開源數(shù)據(jù)庫 座右銘:天行健,君子以自強不息;地勢坤,君子以厚德載物. 入門準備 postgrersql基礎架構 快速使用 初始化集群 數(shù)據(jù)庫服務管理 psql客戶

    2024年02月08日
    瀏覽(16)
  • 6、hive的select(GROUP BY、ORDER BY、CLUSTER BY、SORT BY、LIMIT、union、CTE)、join使用詳解及示例

    6、hive的select(GROUP BY、ORDER BY、CLUSTER BY、SORT BY、LIMIT、union、CTE)、join使用詳解及示例

    1、apache-hive-3.1.2簡介及部署(三種部署方式-內(nèi)嵌模式、本地模式和遠程模式)及驗證詳解 2、hive相關概念詳解–架構、讀寫文件機制、數(shù)據(jù)存儲 3、hive的使用示例詳解-建表、數(shù)據(jù)類型詳解、內(nèi)部外部表、分區(qū)表、分桶表 4、hive的使用示例詳解-事務表、視圖、物化視圖、DDL

    2024年02月11日
    瀏覽(26)
  • SQL JOIN 子句:合并多個表中相關行的完整指南

    SQL JOIN 子句:合并多個表中相關行的完整指南

    JOIN子句用于基于它們之間的相關列合并來自兩個或更多表的行。 讓我們看一下“Orders”表的一部分選擇: OrderID CustomerID OrderDate 10308 2 1996-09-18 10309 37 1996-09-19 10310 77 1996-09-20 然后,看一下“Customers”表的一部分選擇: CustomerID CustomerName ContactName Country 1 Alfreds Futterkiste Maria A

    2024年02月05日
    瀏覽(14)
  • 大數(shù)據(jù)Flink(九十):Lookup Join(維表 Join)

    大數(shù)據(jù)Flink(九十):Lookup Join(維表 Join)

    文章目錄 Lookup Join(維表 Join) Lookup Join 定義(支持 BatchStreaming) :Lookup Join 其實就是維表 Join,比如拿離線數(shù)倉來說,常常會有用戶畫像,設備畫像等數(shù)據(jù),而對應到實時數(shù)倉場景中,這種實時獲取外部緩存的 Join 就叫做維表 Join。

    2024年02月04日
    瀏覽(23)
  • GaussDB數(shù)據(jù)庫SQL系列-UNION & UNION ALL

    GaussDB數(shù)據(jù)庫SQL系列-UNION & UNION ALL

    目錄 一、前言 二、GaussDB? UNION/UNION ALL 1、GaussDB UNION 操作符 2、語法定義 三、GaussDB實驗示例 1、創(chuàng)建實驗表 2、合并且除重(UNION) 3、合并不除重(UNION ALL) 4、合并帶有WHERE子句SQL結果集(UNION ALL) 5、業(yè)務邏輯除重后合并(UNION ALL) 四、GaussDB UNION常見錯誤 1、“each UNION que

    2024年02月12日
    瀏覽(90)
  • 【flink番外篇】2、flink的23種算子window join 和interval join 數(shù)據(jù)傾斜、分區(qū)介紹及詳細示例(1)- window join

    一、Flink 專欄 Flink 專欄系統(tǒng)介紹某一知識點,并輔以具體的示例進行說明。 1、Flink 部署系列 本部分介紹Flink的部署、配置相關基礎內(nèi)容。 2、Flink基礎系列 本部分介紹Flink 的基礎部分,比如術語、架構、編程模型、編程指南、基本的datastream api用法、四大基石等內(nèi)容。 3、

    2024年02月03日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包