下面是BigQuery标准SQL
#standardSQL
SELECT obj, class FROM (
SELECT obj, STRING_AGG(attr ORDER BY attr) attr
FROM `project.dataset.TableA`
GROUP BY obj
) JOIN (
SELECT class, STRING_AGG(attr ORDER BY attr) attr
FROM `project.dataset.TableB`
GROUP BY class
) USING(attr)
您可以使用问题中的虚拟数据测试/玩它,如下所示
#standardSQL
WITH `project.dataset.TableA` AS (
SELECT 'obj1' obj, 'I' attr UNION ALL
SELECT 'obj1', 'II' UNION ALL
SELECT 'obj2', 'I' UNION ALL
SELECT 'obj2', 'II' UNION ALL
SELECT 'obj3', 'I' UNION ALL
SELECT 'obj3', 'II' UNION ALL
SELECT 'obj3', 'II' UNION ALL
SELECT 'obj4', 'III' UNION ALL
SELECT 'obj4', 'I'
), `project.dataset.TableB` AS (
SELECT 'I' attr, 'A' class UNION ALL
SELECT 'II', 'A' UNION ALL
SELECT 'I', 'B' UNION ALL
SELECT 'III', 'B'
)
SELECT obj, class FROM (
SELECT obj, STRING_AGG(attr ORDER BY attr) attr
FROM `project.dataset.TableA`
GROUP BY obj
) JOIN (
SELECT class, STRING_AGG(attr ORDER BY attr) attr
FROM `project.dataset.TableB`
GROUP BY class
) USING(attr)
输出为:
obj class
---- -----
obj1 A
obj2 A
obj4 B