You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并列匹配的多表并保留所有行?已尝试方案遇问题

正确的SQL合并方案(保留所有行及重复值)

你的需求是纵向合并12个同结构的表(保留所有行,包括重复项),UNION ALL是正确的选择,但你之前的代码存在语法错误,而FULL JOIN是用于横向关联表的,完全不符合你的需求,所以会生成多列的ride_id。

方案一:创建新的合并表(永久存储)

如果需要把合并后的数据保存为一个新表,用以下代码(适配BigQuery环境,你的数据集格式符合BigQuery风格):

CREATE TABLE `case-study-cyclist-379323.cyclistic_rider_data.2022_divvy_trip_data` AS
SELECT * FROM `case-study-cyclist-379323.cyclistic_rider_data.202201_divvy_tripdata`
UNION ALL
SELECT * FROM `case-study-cyclist-379323.cyclistic_rider_data.202202_divvy_tripdata`
UNION ALL
SELECT * FROM `case-study-cyclist-379323.cyclistic_rider_data.202203_divvy_tripdata`
UNION ALL
SELECT * FROM `case-study-cyclist-379323.cyclistic_rider_data.202204_divvy_tripdata`
UNION ALL
SELECT * FROM `case-study-cyclist-379323.cyclistic_rider_data.202205_divvy_tripdata`
UNION ALL
SELECT * FROM `case-study-cyclist-379323.cyclistic_rider_data.202206_divvy_tripdata`
UNION ALL
SELECT * FROM `case-study-cyclist-379323.cyclistic_rider_data.202207_divvy_tripdata`
UNION ALL
SELECT * FROM `case-study-cyclist-379323.cyclistic_rider_data.202208_divvy_tripdata`
UNION ALL
SELECT * FROM `case-study-cyclist-379323.cyclistic_rider_data.202209_divvy_tripdata`
UNION ALL
SELECT * FROM `case-study-cyclist-379323.cyclistic_rider_data.202210_divvy_tripdata`
UNION ALL
SELECT * FROM `case-study-cyclist-379323.cyclistic_rider_data.202211_divvy_tripdata`
UNION ALL
SELECT * FROM `case-study-cyclist-379323.cyclistic_rider_data.202212_divvy_tripdata`;

关键修正点:

  • 所有表名/数据集名用**反引号``**包裹(BigQuery中,包含特殊字符或数字开头的标识符必须用反引号),不要用单引号或双引号。
  • 用CREATE TABLE ... AS语法直接将合并结果保存为新表,确保语法完整。

方案二:临时合并查询(CTE)

如果只是需要临时查询合并后的数据,不需要永久存储,用CTE(公共表表达式):

WITH 2022_divvy_trip_data AS (
  SELECT * FROM `case-study-cyclist-379323.cyclistic_rider_data.202201_divvy_tripdata`
  UNION ALL
  SELECT * FROM `case-study-cyclist-379323.cyclistic_rider_data.202202_divvy_tripdata`
  -- 继续添加剩下的10个表
)
SELECT * FROM 2022_divvy_trip_data;

为什么你的第一种方案报错?

  1. 缺少WITH关键字:CTE必须以WITH开头,你直接写2022_divvy_trip_data AS (...)会导致语法错误。
  2. 标识符引号错误:用了单引号而非反引号,BigQuery无法识别正确的表名。
  3. 引号配对错误:你的代码中存在多处单引号不配对的情况(比如第一行表名开头没单引号,结尾却有)。

为什么第二种方案不符合需求?

FULL JOIN是用于横向关联多个表(根据ride_id匹配行),而不是纵向合并行。当你多次FULL JOIN时,每个JOIN都会保留两边不匹配的行,导致生成ride_id_1、ride_id_2等列,完全不是你要的“合并所有行”的效果。

内容的提问来源于stack exchange,提问作者Christian Glass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:27:13