代码之家  ›  专栏  ›  技术社区  ›  arcee123

如何在联接中获得第一个响应

  •  1
  • arcee123  · 技术社区  · 6 年前

    我正在处理此查询:

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

    t2.地址上的所有联接匹配中的值都相同。然而,质疑卡特尔。

    如何设置连接,这样我只从连接中得到“第一个”响应,而不是所有响应?

    顺便说一句,每张桌子将近300英里。

    谢谢!

    2 回复  |  直到 6 年前
        1
  •  2
  •   Mikhail Berlyant    6 年前

    t2.地址上的所有联接匹配中的值都相同…

    …所以它不一定是第一个,而是任何…

    下面是BigQuery标准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
    
        2
  •  0
  •   Gordon Linoff    6 年前

    一种方法使用 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;
    

    这个 ? 用于指定顺序的列——什么是“第一”的意思。