我有两个具有完全相同模式的表,其中一个字段是一条记录,我尝试在这两个表之间比较这个字段。
例如:
表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中比较两个列表(比较结构和内容)。
有没有办法实现类似的东西?
谢谢
发布于 2021-02-15 00:57:42
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)
https://stackoverflow.com/questions/66196527
复制相似问题