查询使用相同字段的多个表

Posted

技术标签:

【中文标题】查询使用相同字段的多个表【英文标题】:query multiple tables that use the same fields 【发布时间】:2016-06-16 01:07:55 【问题描述】:

我正在使用 bigquery 来查询共享一个架构的两个数据集:

SELECT
    *
FROM (
  SELECT
    name as name,
    REGEXP_EXTRACT_ALL(details, r"(value=\w+)") as regex
  FROM
    Dataset.table1,
    Dataset.table2 )
WHERE
  ARRAY_LENGTH(regex) > 0

但我收到“名称”字段不明确的错误,这是有道理的,因为我没有指定两个表中的任何一个。

有没有办法像这样一次从 2 个以上的表中查询共享字段?

【问题讨论】:

也许添加示例数据和预期结果?您当前正在两个表之间创建笛卡尔积。您可能应该使用joinunion,但如果没有样本数据就很难知道。 您可以通过包含别名来解决此问题,这些别名决定您从哪个表中选择name 列。 【参考方案1】:

由于使用了 ARRAY_LENGTH 和 REGEXP_EXTRACT_ALL,看起来您正在使用BigQuery Standard SQL 模式。 同时,您仍在使用 UNION ALL 的旧 SQL 概念,通过使用 comma - 这不是标准 SQL 的情况! 您应该使用明确的 UNION ALL 希望这会有所帮助!

【讨论】:

【参考方案2】:

你可以使用 tablename.columnname 使用以下查询

SELECT
    *
FROM (
  SELECT
    table1.name as name,
    REGEXP_EXTRACT_ALL(details, r"(value=\w+)") as regex
  FROM
    Dataset.table1,
    Dataset.table2 )
WHERE
  ARRAY_LENGTH(regex) > 0

【讨论】:

那么这不是只从 table1 中提取结果吗?这就是我尝试这个时看到的结果

以上是关于查询使用相同字段的多个表的主要内容,如果未能解决你的问题,请参考以下文章

使用以相同字段开头的 GROUP BY 优化多个查询

SQL查询结果一字段相同合并,另一字段为数字和逗号合并并去重

SQL性能问题.现在表设计可以把一个大表按类型(各类型字段不相同)拆分成多个小表.拆分后比较方便.

sql server多个相同的数据删除

多个表相同的字段LINQ

一次向多个表添加新字段?