【问题标题】:Big Query SQL. Combining tables with the same columns (No PK)大查询 SQL。合并具有相同列的表(无 PK)
【发布时间】:2017-12-23 15:01:06
【问题描述】:

我正在尝试合并 3 个以上的 NOAA GSOD 数据表,以便将数据集中到一个超级表中。我正在尝试将站表加入到结果数据中,然后按国家/地区过滤。

我只能为一张桌子做到这一点,但不能为更多。以下是我尝试修改代码以实现此目的。我尝试了几种不同的修改都没有成功:(

SELECT * FROM [bigquery-public-data:noaa_gsod.gsod2016] AS gsod2016, 
[bigquery-public-data:noaa_gsod.gsod2015] AS gsod2015 JOIN [bigquery-public-
data:noaa_gsod.stations] AS stations ON gsod2016.stn = stations.USAF AND 
gsod2015.stn = stations.USAF WHERE stations.country = "CB"

NOAA GSOD 大查询数据: https://bigquery.cloud.google.com/table/bigquery-public-data:noaa_gsod.gsod2016

【问题讨论】:

  • 您需要加入还是联合?也不要混合连接符号选择标准使用,符号或内部连接,而不是两者。和顺序很重要...不能加入它,除非它是按顺序自上而下定义的。
  • 我不完全确定您所说的符号或内部连接是什么意思。上面的代码作为一行工作。例如。 SELECT * FROM [bigquery-public-data:noaa_gsod.gsod2016] AS gsod2016 加入 [bigquery-public-data:noaa_gsod.stations] AS 站上 gsod2016.stn = station.USAF WHERE station.country = "CB"
  • gsod2016 后面有一个逗号。当与 join 结合使用时,这是非标准的连接语法。

标签: mysql sql


【解决方案1】:

使用 1 个标准内连接或 ,(最好是内连接语法)并确保表的顺序正确,除非在 ON 上方定义了表,否则您无法加入表。

SELECT * 
FROM [bigquery-public-data:noaa_gsod.stations] AS stations 
INNER JOIN [bigquery-public-data:noaa_gsod.gsod2016] AS gsod2016
  ON gsod2016.stn = stations.USAF 
INNER JOIN [bigquery-public-data:noaa_gsod.gsod2015] AS gsod2015 
  ON gsod2015.stn = stations.USAF 
WHERE stations.country = "CB"

现在说了这么多,你真的是想加入还是想UNION ALL 数据并添加一年

【讨论】:

  • 嗨 xQbert,这似乎遇到了无限查询。是的,我相信我确实需要 UNION。虽然 BigQuery 似乎无法识别该代码。
  • 联合说是支持...chartio.com/resources/tutorials/…每个表的所有列都是相同的数据类型吗?您是否单独选择每个字段/列而不是使用 *?
  • 不知道为什么这将是一个无限查询是各自表中 stn 和 usaf 上的索引?和车站的国家?
  • 您只需要知道这是可能的,而不是技术限制。你做了艰苦的工作:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
  • 2022-11-10
  • 2017-11-04
  • 2013-02-28
  • 2022-12-12
  • 1970-01-01
相关资源
最近更新 更多