SQL Join :: Выборка записей вне условия соединения - PullRequest
0 голосов
/ 15 января 2019

У меня есть 2 таблицы A и B
A
enter image description here

B
enter image description here

Требование состоит в том, чтобы объединить обе таблицы, используя столбец идентификатора, и, кроме того, если значение выбранного имени имеет другую запись с другим идентификатором, эта запись также должна быть выбрана. Как на скриншоте ниже.
Выход:
enter image description here

Требования

  • Таблица B представлена ​​в размере ТБ. одиночное объединение обеих таблиц будет предпочтительнее
  • запрос должен быть выполнен в улье

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Вы можете присоединиться к одной и той же таблице несколько раз. Таким образом, в приведенном ниже запросе b1 выдаст вам все имена для идентификаторов в A, а b2 соединится по имени, чтобы получить все дополнительные идентификаторы, которых нет в A.

select
  b2.*
from
  A 
  inner join B b1 on b1.id = A.id
  inner join B b2 on b2.name = b1.name
0 голосов
/ 15 января 2019

Я не знаком с HiveQL, но с обычным SQL вам нужно будет второй раз присоединить таблицу B к себе как часть запроса.

select
    b_name.id, b_name.name
from
    #table_A a                  
    join #table_B b             -- This table gets the "name" value for lookup
        on (a.id=b.id)
    join #table_B b_name        -- This is the table you want to pull your "output" from
        on (b.name=b_name.name)

Этот запрос, по сути, говорит, что вам нужно найти значение столбца «имя» в таблице B, где в таблице A есть соответствующий идентификатор, а затем найти все строки с этим значением имени в таблице B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...