【问题标题】:How to compare two arrays in Standard SQL (BigQuery)?如何比较标准 SQL(BigQuery)中的两个数组?
【发布时间】:2021-02-14 14:43:21
【问题描述】:

我有两个具有完全相同架构的表,其中一个字段是记录,我尝试在两个表之间比较该字段。

例如:

表 A:

{ Name: 'Mary',
  DOB: '06.06.1970',
  Children:[
            { Name: John,   Age: 6 },
            { Name: Agatha, Age: 10}
           ]
},
{ Name: 'Bob',
  DOB: '30.03.1982',
  Children:[
            { Name: Anthony, Age: 9 },
            { Name: William, Age: 4 },
            { Name: Rose,    Age: 2 }
           ]
},
{ Name: 'Adam',
      DOB: '312.10.1980',
      Children:[
                { Name: Andrew, Age: 9 },
                { Name: Kate, Age: 4 }
               ]
    }

表 B:

{ Name: 'Mary',
      DOB: '06.06.1970',
      Children:[
                { Name: John,   Age: 6 },
                { Name: Agatha, Age: 10}
               ]
    },
    { Name: 'Bob',
      DOB: '30.03.1982',
      Children:[
                { Name: Anthony, Age: 9 },
                { Name: George,  Age: 4 },
                { Name: Frank,   Age: 2 }
               ]
    },
    { Name: 'Adam',
      DOB: '312.10.1980',
      Children:[
                { Name: Andrew, Age: 9 },
                { Name: Kate, Age: 4 },
                { Name: Jonathan,    Age: 2 }
               ]
    }

我想得到的输出是:

Name    
----------
Bob     
Adam    

由于表 A 和表 B 中 Bob 或 Adam 的子项详细信息不同(无论是记录的大小(子项数量)或详细信息(子项名称等...))

我尝试使用SELECT UNION DISTINCT,但它不适用于数组,我也尝试过!=<>,但它不适用于数组... 比较两个数组是比较理想的,就像在 Python 中比较两个列表一样(比较结构和内容)。

有没有办法实现类似的东西?

谢谢

【问题讨论】:

    标签: sql arrays google-bigquery nested


    【解决方案1】:
    select name
    from `project.dataset.tableA` a
    join `project.dataset.tableB` b
    using(name)
    where a.dob != b.dob 
    or (select string_agg(format('%t', s) order by name) from a.children s) 
    != (select string_agg(format('%t', s) order by name) from b.children s)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多