【问题标题】:Outer Join using multiple Google Sheets and the QUERY function使用多个 Google 表格和 QUERY 函数进行外部联接
【发布时间】:2015-09-02 19:08:37
【问题描述】:

例如,假设我在 Google Doc 的同一工作簿中有以下工作表:

 SHEET1            |   SHEET2
 \   A  |  B       |   \   A   |   B   |   C   |   D
1|  ID  |Lookup    |  1| Lookup| Name  |Flavor | Color
2|  123 | 4445     |  2| 1234  |Whizzer|Cherry | Red
3|  234 | 4445     |  3| 4445  |Fizzer |Lemon  | Yellow
4|  124 | 1234     |  4| 9887  |Sizzle |Lime   | Blue
5|  767 | 1234     |
6|  555 | 9887     |

显然,Google Docs 并未考虑到关系数据库,但我试图获得类似于 SQL 查询的结果

SELECT
  SHEET1.ID,
  SHEET2.*
FROM 
  SHEET1 
    LEFT JOIN
      SHEET2
    ON SHEET1.Lookup = SHEET2.Lookup

生成的表格看起来像

 SHEET3            
 \   A    |   B   |   C   |   D   |   E   
1|   ID   |Lookup | Name  |Flavor | Color
2|  123   | 4445  |Fizzer |Lemon  | Yellow
3|  234   | 4445  |Fizzer |Lemon  | Yellow
4|  124   | 1234  |Whizzer|Cherry | Red
5|  767   | 1234  |Whizzer|Cherry | Red
6|  555   | 9887  |Sizzle |Lime   | Blue

但这就是我目前的立场

 SHEET3            
 \   A    |   B   |   C   |   D   |   E   
1|        |       |       |       |
2|  123   | 4445  | #N/A  |       |
3|  234   | 4445  |       |       |
4|  124   | 1234  |       |       |
5|  767   | 1234  |       |       |
6|  555   | 9887  |       |       |

目前我已经设法使用QUERY 函数从SHEET1 中获取值,并在SHEET3!C1 中尝试了一些不同的QUERY 函数,以尝试“LEFT JOIN”这两张纸使用this blog post 作为参考。至此,我使用的两个函数如下。

SHEET3!A2=QUERY(SHEET1!A2:B20, "SELECT A,B")
SHEET3!C2=QUERY(SHEET2!A2:E20, "SELECT B,C,D WHERE A="""&B2&"""")

将鼠标悬停在C2 中的错误上会显示“查询已完成,输出为空”。如何加入这些表格?

其他参考资料:
Google Docs syntax page for QUERY

【问题讨论】:

  • 添加了所需的结果。我认为我试图模拟的 SQL 代码已经足够了,但不可能太彻底。

标签: google-sheets google-docs


【解决方案1】:

在 Sheet3 中执行此操作。

在单元格 A1 中,获取正确的标题:

={Sheet1!A1:B1,Sheet2!B1:D1}

在单元格 A2 中,要获取 Joined 数据表,请尝试以下公式:

=FILTER({Sheet1!A2:B,
 VLOOKUP(Sheet1!B2:B, {Sheet2!A2:A, Sheet2!B2:D}, {2,3,4}, false)},
 Sheet1!B2:B<>"")

我已经写了一个关于这个主题的综合指南:

'Mastering Join-formulas in Google Sheets'

【讨论】:

    【解决方案2】:

    如果您将 SHEET1 复制到 SHEET3 (A1) 然后在 C2 中:

    =vlookup($B2,Sheet2!$A:$D,column()-1,0)  
    

    在添加三个列标签后,上下复制应该会给出您显示的结果。

    【讨论】:

    • 伙伴,如果您将 Vlookup 与 Arrayformula 或过滤器函数和大括号结合使用,您可以获得一张只有一个公式(在一个单元格中)的连接数据表。无需上下复制。
    【解决方案3】:

    Sheet3!A2:

    =ARRAYFORMULA(Sheet1!A2:B20)    
    

    表 3!C2:

    =ARRAYFORMULA(VLOOKUP(B2:B20,A1:D50,{2,3,4},0))
    

    【讨论】:

    • 尝试用另一对花括号封装 Vlookup 函数,它可能会更好......
    【解决方案4】:

    以下插件将提供您所需的一切:Formulas by Top Contributors,通过使用内置 SQL 连接类型和 MATRIX 公式:

    =MATRIX(SQLINNERJOIN(Sheet1!A1:B6,2,Sheet2!A1:D4,1, TRUE),,"3")
    

    它将产生以下结果:

    我为您创建了一个示例文件:SQL JOINS

    隶属关系:作为 Google 杰出贡献者,我帮助创建了插件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 2011-04-12
      • 1970-01-01
      相关资源
      最近更新 更多