簡體   English   中英

HIVE:如何僅 select 兩個表中兩列的不同值在第三個表中不存在?

[英]HIVE: How to only select distinct values from two columns in two tables that does not exist in a third table?

我有三張桌子。

t1
Name | Version | ...
A        1 
A        2
B        1
B        3

t2
Name  | Version | ...
 A        1
 A        3
 B        2
 B        3

 t3 
 Name  | Version | ...
  A         1
  A         2

我想 select 表 1 和表 2 中不存在於表 3 中的不同名稱和版本值。

我當前的 SELECT 查詢從表 1 和表 2 中選擇不同的值

SELECT c.name,c.version FROM 
   (SELECT name,version from t1 
    UNION   
    SELECT name,version from t2
    ) c

這返回

 result
 Name  | Version
  A        1
  A        2 
  A        3
  B        1
  B        2
  B        3

我想要什么

wanted result
Name | Version
  A      3
  B      1
  B      2
  B      3

如何正確修改 HQL 查詢以獲得此結果? 感謝您提供的任何幫助。

僅將 LEFT JOIN 與 t3 表 + 過濾器未連接的行一起使用:

SELECT c.name,c.version 
  FROM 
   (SELECT name,version from t1 
    UNION   
    SELECT name,version from t2
    ) c
  LEFT JOIN t3 on c.name=t3.name and c.version=t3.version
WHERE t3.name is NULL --do not exist in t3 table
;

另一種可能的方法是使用 NOT EXISTS:

SELECT c.name,c.version 
  FROM 
   (SELECT name,version from t1 
    UNION   
    SELECT name,version from t2
    ) c
WHERE NOT EXISTS (SELECT 1 FROM t3 WHERE c.name=t3.name and c.version=t3.version)
;

您可以在連接條件中使用 <>

 SELECT c.name,c.version 
  FROM 
   (SELECT name,version from t1 
    UNION   
    SELECT name,version from t2
    ) c
  INNER JOIN t3 on c.name<>t3.name and c.version<>t3.version

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM