alasql - 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 语句中!我在附近得到一些东西:
以下是我已验证的内容:
- 单个表上的简单选择语句按预期工作。列以正确的顺序返回。
- 我的 SELECT 子句的顺序正确,假设列名为 new.[0] 是新表中的第 0 列。这是一个我可能做错的假设。
- 我的关键列是正确的数字——我已经手动检查过,我可以通过在调试模式下查看我的表变量来验证。
有任何想法吗?
解决方案
我已经将 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 脚本代码,但使用虚构数据。
推荐阅读
- pseudocode - 学习编写伪代码的最佳方法是什么
- javascript - 何时指定和不指定“窗口”。窗口属性和方法的前缀
- java - 在无向图中找到两条不重叠的路径
- git - 当我只有 .git 文件夹时,有没有办法从项目中恢复未提交的更改?
- python-3.x - 我很努力但没有摆脱这个 IndentationError: unindent does not match any external indentation level
- javascript - 从前端条带连接的调用,以编程方式更改条带连接的 ID
- android - Android Firebase 根据 Recyclerview 条件创建通知
- postgresql - Sequelize:查询将字符串数组作为字符串返回,而不是作为字符串数组?
- vue.js - 选中 Vue Js 中的取消选中复选框
- ruby-on-rails - 如何阻止 webpacker 按需重建?