Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 谷歌电子表格“=查询「;join()等价函数?_Sql_Google Sheets_Google Query Language - Fatal编程技术网

Sql 谷歌电子表格“=查询「;join()等价函数?

Sql 谷歌电子表格“=查询「;join()等价函数?,sql,google-sheets,google-query-language,Sql,Google Sheets,Google Query Language,这个问题是关于使用=查询函数连接Google电子表格中的两个数据库 我有一张像这样的桌子,范围是A1:C3 a d g b e h c f i 我还有一张桌子 c j m a k n b l o 我希望最后一张桌子像这样 a d g k n b e h l o c f i j m 我可以很容易地在单元格D1中使用vlookup函数并将其粘贴下来,但我的数据集很大。我需要一整页的vlookups,谷歌电子表格告诉我,我的复杂性已经到了极限 我看看谷歌的查询语言参考。。。似乎没有提到任何类型

这个问题是关于使用=查询函数连接Google电子表格中的两个数据库

我有一张像这样的桌子,范围是A1:C3

a d g
b e h
c f i
我还有一张桌子

c j m
a k n
b l o
我希望最后一张桌子像这样

a d g k n
b e h l o 
c f i j m
我可以很容易地在单元格D1中使用vlookup函数并将其粘贴下来,但我的数据集很大。我需要一整页的vlookups,谷歌电子表格告诉我,我的复杂性已经到了极限

我看看谷歌的查询语言参考。。。似乎没有提到任何类型的“连接”函数。你会认为这将是一个简单的“加入”类型的操作

没有vlookup,任何人都能解决这个问题吗?

您可以使用或拖动此公式: 导入或
查询后
-ing第一个表;在D列中:

=QUERY(Sheet2!A1:C3, "Select B,C WHERE A='" & A1 & "'", 0)
简短回答 版本0.7(2016)不包括联接(左联接)运算符,但这可以通过使用数组公式实现,该公式的结果可以用作查询函数的输入或用于其他用途

解释 数组公式和函数使两个简单表之间的联接成为可能。为了便于阅读,建议的公式使用命名范围而不是范围引用

命名范围
  • 表1:表1!A1:C3
  • 表2:表2!A1:C3
  • 身份证号码:第1张!A1:A3
公式 =阵列公式( { 表1, vlookup(ID,表2,列(间接(“R1C2:R1C”)和列(表2,0)),0) } ) 备注:

  • 使用开放范围是可能的,但这可能会使电子表格速度变慢
  • 要加快重新计算时间,请执行以下操作:
  • Indirect(“R1C2:R1C”&COLUMNS(表2),0)
    替换为表2中从2到列数的常数数组
  • 从电子表格中删除空行
  • 例子 请参阅以获取示例

    注 2017年,谷歌改进了关于查询的官方英文帮助文章。它还没有包括像这样的主题,但可能有助于理解它的工作原理。

    如果您可以将每个“索引”(a、b、c)映射到特定的行或列,则可以使用该函数

    在这种情况下,您可能会将“a”映射到a列(或第1行),“b”映射到b列(或第2行),以此类推


    另外,似乎要解决这个确切的用例。

    对于A5:C7中的“其他”表,请尝试:

    =query({A1:C3,query(sort(A5:C7,1,TRUE),"Select Col2,Col3")})
    

    因此,这回答了如何使用Vlookup函数,但只在一个单元格中执行此操作。
    在您的示例中,假设每个数据表都有以下单元格引用:

    表1:表1!A1:C3

    a d g
    b e h
    c f i
    
    表2:表2!A1:C3

    c j m
    a k n
    b l o
    
    这就是公式的构造方式

    连接公式 让这个公式起作用的关键是理解如何在Vlookup范围内使用花括号。基本上,您将范围的第一个单元格引用定义为与Vlookup Search_键匹配的列。范围中的其余单元格引用与要联接的列相关

    索引写为{2,3}以返回范围的第二列和第三列(该范围总共由3列组成);花括号与Vlookup索引中的Arrayformula无关,但对于从Vlookup函数返回多个列是必需的。不写{1,2,3}的原因是您不希望包含用于联接的列

    示例:表2中用于联接的列位于另一列(要联接的数据右侧) 即使第二个表中的联接列作为该表的第三列,也可以使用这种联接公式。 假设本例中的原始数据如下所示:

    表1(第1张):

    表2(第2张):

    如果您这样编写公式,您仍然会得到所需的结果(如关联数据表中所示):

    联接数据表:

    =ArrayFormula(
       {
         Sheet1!A1:C,
         vlookup(Sheet1!A1:A, {Sheet2!C1:C, Sheet2!A1:B}, {2,3}, false)
       }
    )
    
    a d g k n
    b e h l o 
    c f i j m
    
    在连接公式中,请注意,表2的第三列作为Vlookup范围中的第一个单元格引用
    之所以这样做,是因为当您在范围中使用大括号(与Arrayformula一起使用)时,Vlookup Search_键不会在原始数据中查找作为公分母的列,而是将大括号内的数组用作引用,以查找作为公分母的列(默认情况下,这是范围的第一列)

    我写了一本关于这个主题的综合指南,名为:


    我通过使用Javascript LINQ(语言集成查询)解决了这个问题

    它允许您使用复杂的连接条件指定Javascript。您还可以执行其他SQL查询,例如分组、投影、排序和筛选工作表,就像它们是数据库表一样。请查看下面的链接

    注意,在LINQ查询语言中,我用下划线替换了列名中的所有空格,使它们成为有效的JS标识符


    我猜
    索引
    匹配
    的复杂性与vlookups相同,但您可以尝试。如果这不起作用,那么我认为需要编写自定义函数。@Konstant。谢谢您的建议。您的解决方案也很有效。我认为自从新的Google sheets之后,这个问题变得不那么重要了。支持虽然他们已经消除了复杂性限制的数量,但我仍然注意到较大的工作表存在一些问题。如果可能的话,您可以给我共享一个示例工作表(包含大量数据)。我将尝试为其编写一个自定义函数。我无法共享数据。我认为您可以使用
    rand()重新创建它
    function@ruben。谷歌打算什么时候重写他们的查询功能?似乎越来越多的人在使用它,是时候让它变得更健壮了!现在这是唯一一个不需要在每个单元格中粘贴公式就可以用于大数据集的答案。这真的很有帮助。谢谢!这非常有用
    a d g
    b e h
    c f i
    
    j m c
    k n a
    l o b
    
    =ArrayFormula(
       {
         Sheet1!A1:C,
         vlookup(Sheet1!A1:A, {Sheet2!C1:C, Sheet2!A1:B}, {2,3}, false)
       }
    )
    
    a d g k n
    b e h l o 
    c f i j m