Google Apps 脚本:SQL 查询中的数组参考 (Javascript/AlaSQLGS)

Google Apps Script: Array Reference in SQL Query (Javascript/AlaSQLGS)

提问人:user2134182 提问时间:8/21/2022 最后编辑:user2134182 更新时间:8/23/2022 访问量:275

问:

我无法让我的查询接受我的 WHERE 条目:

const query = "SELECT MATRIX Col1 FROM ? WHERE Col1 IN (name) ";
var res = alasql(AlaSQLGS.transformQueryColsNotation(query), [values]);
console.log(res.length);
console.log(res[0][0][0]);

res.length 返回 0,并且 res[0][0][0] 出现以下错误: “TypeError:无法读取未定义的属性'0'”

name 的条目来自一个数组,但在尝试了我能想到的一切之后,我创建了一个简单的 .没用。我什至无法让它输入名称:var name = "Tribiani, Joe"

const query = "SELECT MATRIX Col1 FROM ? WHERE Col1 IN ('Tribiani, Joe') ";

我让它工作的唯一方法是:但在这种情况下我也不能使用变量“name”,必须写进去。const query = "SELECT MATRIX Col1 FROM ? WHERE Col1 LIKE ('Tribiani, Joe%') ";

有人知道我做错了什么吗?如何正确指向 AlaSQL 查询中的数组元素?

javascript sql google-apps-script alasql

评论

0赞 TheMaster 8/21/2022
[0]?你是说吗?Col1
1赞 user2134182 8/22/2022
是的 - 我正在玩这个,看看它是如何工作的,“Col 1”以及括号“[0]”中的列名有效。(我没有命名列,所以代码自动为第一列分配了一个“0”。
0赞 user2134182 8/22/2022
为了便于阅读,我将其更改为 Col1。
0赞 TheMaster 8/23/2022
当您分享 Google 文件时,公众可以访问您的电子邮件地址
0赞 user2134182 8/23/2022
好的,将删除工作表链接。

答:

0赞 Cooper 8/22/2022 #1

这行得通吗?

var name = "Tribiani, Joe";
const query = `SELECT MATRIX Col1 FROM ? WHERE Col1 IN (${name})`;

我会把它放在评论中,但反引号没有正确显示。

评论

0赞 user2134182 8/23/2022
不,不工作。
0赞 TheMaster 8/22/2022 #2
const query = "SELECT MATRIX [0] FROM ? WHERE [0] IN @(?) ",
  name = ['Tribiani', 'Joe'],
  res = alasql(query, [values, name]);
console.log(res);

现场演示:

/*<ignore>*/console.config({maximize:true,timeStamps:false,autoScroll:false});/*</ignore>*/ 
const data = [[1,2,3],[4,5,6],[1,4,8]];
const name = [1,2];
const res = alasql('SELECT MATRIX [0] FROM ? WHERE [0] IN @(?)',[data, name]);
console.log(res)   
<script src="https://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]"></script>

评论

0赞 user2134182 8/23/2022
我现在收到一个解析错误:SyntaxError:第 1 行的解析错误:...从?其中 [0] 在 ?-----------------------^ 期待 'LITERAL', 'BRALITERAL', 'LPAR', 'AT', 'IF', 'REPLACE', 'DATEADD', 'DATEDIFF', 'INTERVAL',得到 'QUESTION' 我做了一个带有 GAS 代码的清理表,并将其发布在上面的原始问题中。
0赞 TheMaster 8/23/2022
@user2134182 检查编辑。现在应该修复。
0赞 user2134182 8/23/2022
非常感谢您对此的帮助 - 看起来我有一个数组/对象问题。还没有弄清楚到底是什么问题。一旦我这样做,我就会更新它。我目前可以以这种方式运行代码而不会出现问题: const query = “SELECT MATRIX [0] FROM ?其中 [0] 喜欢 ('“ +name+”%')“;
0赞 TheMaster 8/23/2022
@user2134182 我的代码是否引发了错误?
0赞 user2134182 8/23/2022
每次查看代码没有错误 - 它返回一个空数组。这意味着它无法在“值”中找到“名称”。values 数组是一个 3D 数组,我还没有弄清楚如何填充它,以便查询实际上可以找到“名称”并返回第 3 维中的值。不知道为什么它适用于 LIKE(它真的不应该)。我正在努力将其拆开并弄清楚如何正确设置它。我是 JS 的新手,可能需要一点时间才能整理好它。