首页 > 解决方案 > AliSQL 结果列与 SELECT 子句不同

问题描述

在 Google 表格中使用 Apps 脚本处理大量数据非常困难。我希望能够使用 AlaSQL 来提供帮助——它有一个非常有用的端口,仅适用于 Apps Script。但是,我得到了一些非常出乎意料的结果。由于我正在使用的数据的机密性,我将尽可能概括,同时仍然提供重要的细节。

我正在处理的文档必须每季度更新一次——即新数据需要替换旧数据。但是,新数据集可能会与旧数据集重叠。换句话说,旧数据集中的一些记录仍将存在于新数据集中。我们希望能够将一些手动输入的列(如评论、日期等)拉到新数据集中。从概念上讲,这是一个超级简单的数据库操作。它看起来像这样(在伪代码中):

SELECT 
  new.*,
  old.notes,
  old.dates,
  old.etcetera
FROM
  new_data_table AS new
  LEFT OUTER JOIN old_data_table AS old ON new.primary_key = old.primary_key

这就是它变得有点奇怪的地方。我给 AlaSQL 一个带有两个表参数的查询。查询如下所示:


SELECT MATRIX
  new.[26], //Primary key
  new.[1], //Info1
  new.[2], //Info2
  new.[3], //Info3
  ...
  old.[1], //Info6
  ...
FROM ? AS new
LEFT OUTER JOIN ? AS old ON new.[26] = old.[0]

然后,我将它提供给查询,如下所示:

AlaSql(query, [new, old])

但我的结果不是我所期望的。据我所知,连接本身运行良好——两个表上的 PK 是匹配的,并且它们被组合在一起。但是,我得到的输出中的列的顺序与我在 SELECT 语句中指定的顺序完全不同。事实上,我在数据(来自旧表)中有一些列,我什至根本不包括在 SELECT 语句中!我在附近得到一些东西:

以下是我已验证的内容:

  1. 单个表上的简单选择语句按预期工作。列以正确的顺序返回。
  2. 我的 SELECT 子句顺序正确,假设列名为 new.[0] 是新表中的第 0 列。这是一个我可能做错的假设。
  3. 我的关键列是正确的数字——我已经手动检查过,我可以通过在调试模式下查看我的表变量来验证。

有任何想法吗?

标签: alasql

解决方案


我已经将 alaSQL 与 Google Apps Script 一起使用了一段时间,并且 LEFT JOIN 效果很好。我总是在语法中明确指定每个 SELECT 列:table.column。

我使用 SUPERSQL 函数来调用 alaSQL。我建议您查看https://github.com/chicagocomputerclasses/SUPERSQL-Google-Sheets-Function并在 https://www.youtube.com/playlist?list=PLv9Pf9aNgemvJdbQrfqXIRs8ssNujA8Vz 观看视频

如果您需要更多帮助,请发布您的确切 Apps 脚本代码,但使用虚构数据。


推荐阅读