HIVE: Как выбрать отдельные значения из двух столбцов в двух таблицах, которых нет в третьей таблице? - PullRequest
0 голосов
/ 04 октября 2019

У меня есть три таблицы.

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

Я хочу выбрать отдельные значения имени и версии из таблицы 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-запрос, чтобы получить этот результат? Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

вы можете использовать <> в состоянии соединения

 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
0 голосов
/ 04 октября 2019

Использовать 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)
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...