Google bigquery 如何在BigQuery中将一个表中的列与另一个表中的数组进行比较?

Google bigquery 如何在BigQuery中将一个表中的列与另一个表中的数组进行比较?,google-bigquery,Google Bigquery,请继续回答我的上一个问题 如果表a中的数组中的值通过相同的ID存在任何差异,我希望从表b中(在行中)获取所有值 WITH a as (SELECT 1 as id, ['123', 'abc', '456', 'qaz', 'uqw'] as value UNION ALL SELECT 2, ['123', 'wer', 'thg', '10', '200'] UNION ALL SELECT 3, ['200'] UNION ALL SELECT 4, null UNION ALL SELE

请继续回答我的上一个问题

如果表
a
中的数组中的值通过相同的ID存在任何差异,我希望从表
b
中(在行中)获取所有值

WITH a as (SELECT 1 as id, ['123', 'abc', '456', 'qaz', 'uqw'] as value
UNION ALL SELECT 2, ['123', 'wer', 'thg', '10', '200']
UNION ALL SELECT 3, ['200']
UNION ALL SELECT 4, null
UNION ALL SELECT 5, ['140']),
b as (SELECT 1 as id, '123' as value
      UNION ALL SELECT 1, 'abc'
      UNION ALL SELECT 1, '456'
      UNION ALL SELECT 1, 'qaz'
      UNION ALL SELECT 1, 'uqw'
      UNION ALL SELECT 2, '123'
      UNION ALL SELECT 2, 'wer'
      UNION ALL SELECT 2, '10'
      UNION ALL SELECT 3, null
      UNION ALL SELECT 4, 'wer'
      UNION ALL SELECT 4, '234'
      UNION ALL SELECT 5, '140'
      UNION ALL SELECT 5, '121'

)
SELECT * EXCEPT(flag)
FROM (
  SELECT b.*, COUNTIF(b.value IS NULL) OVER(PARTITION BY id) flag
  FROM a LEFT JOIN a.value 
  FULL OUTER JOIN b
  USING(id, value)
)
WHERE flag > 0
AND NOT id IS NULL 
它适用于除
5
之外的所有ID。 在我的例子中,如果有任何差异,我需要返回所有值

在示例中,表a中id为
5
的数组只有一个值为“140”,而表b中id为
5
的两行值为“140”。因此,在这种情况下,表
b
中id
5
的所有值也必须出现在预期输出中

需要如何修改此查询以获得我想要的内容


更新 好像对我有用。但我不能100%确定

SELECT * EXCEPT(flag)
FROM (
  SELECT b.*, COUNTIF((b.value IS NULL AND a.value IS NOT NULL) OR (b.value IS NOT NULL AND a.value IS NULL)) OVER(PARTITION BY id) flag
  FROM a LEFT JOIN a.value 
  FULL OUTER JOIN b
  USING(id, value)
)
WHERE flag > 0
AND NOT id IS NULL

谢谢你的回复!我用另一个解决方案更新了这篇文章。你能告诉我我是否错了吗?我瞥了一眼,看起来应该有用-很好地调整了你上一个问题的答案:o)
#standardSQL
SELECT * 
FROM table_b 
WHERE id IN (
  SELECT id FROM table_a a
  JOIN table_b b USING(id)
  GROUP BY id
  HAVING STRING_AGG(IFNULL(b.value, 'NULL') ORDER BY b.value) !=
    IFNULL(ANY_VALUE((SELECT STRING_AGG(IFNULL(value, 'NULL') ORDER BY value) FROM a.value)), 'NULL')
)