Как получить ПЕРВЫЙ ответ в объединении - PullRequest
0 голосов
/ 25 ноября 2018

Я работаю с этим запросом:

select t1.*, t2.Value from `db.ds.table1` t1
join `db.ds.table2` t2
on t1.Address= t2.Address

t2.Value одинаково во всех совпадениях соединения по адресу.Тем не менее, запрос декартов.

Как установить соединение, чтобы я получил только «первый» ответ от объединения, а не ВСЕ из них?

Кстати, есть около 300 милТаблица.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

t2.Value одинаково во всех матчах соединения по адресу ...

... так что это действительно не обязательно первое, а скорее любое ...

Ниже для BigQuery Standard SQL

#standardSQL
SELECT t1.*, t2.value 
FROM `project.dataset.table1` t1
JOIN (
  SELECT address, ANY_VALUE(value) value 
  FROM `project.dataset.table2` 
  GROUP BY address
) t2
ON t1.address = t2.address
0 голосов
/ 26 ноября 2018

Один метод использует row_number():

select t1.*, t2.Value
from `db.ds.table1` t1 join
     (select t2.*, row_number() over (partition by address order by ?) as seqnum
      from `db.ds.table2` t2
     ) t2
     on t2.address = t1.address and t2.seqnum = 1;

? для столбца, который определяет порядок - что означает «первый».

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