联合所有两个表而不是加入

问题描述

我有几个表我无法加入它们,因为它变得非常复杂并且 bigquery 无法处理它。所以我试图联合所有表,然后分组。我在这个过程中遇到了问题。我有两个名为 t1 和 t2 的表,带有以下标题,它们没有空值:

a.   b.   c.   d.                a.   b.   c.   e.   

所以为了将所有人联合起来并将它们分组,我有以下代码

WITH
  all_tables_unioned AS (
  SELECT
    *,NULL e
  FROM
    `t1`
  UNION ALL
  SELECT
    *,NULL d
  FROM
    `t2` )
SELECT
  a,b,c,MAX(d) AS d,MAX(e) AS e
FROM
  all_tables_unioned
GROUP BY
  a,c

不幸的是,当我运行它时,我得到一个表 a,d,e,其中 e 列全为空! 我尝试在 union all 之前对每个表运行查询,以确保它们不为空。我真的不知道我的查询有什么问题。

解决方法

union all 不使用 名称。只需明确列出所有列:

WITH all_tables_unioned AS (
      SELECT a,b,c,d,NULL as e
      FROM `t1`
      UNION ALL
      SELECT a,NULL as d,e
      FROM `t2`
     )

无论您分配什么名称,union all 都会使用位置来匹配列。