javascript - 参数化 Bigquery 和字符串值数组
问题描述
我正在运行一个运行参数化选择查询的 nodejs 程序。我有以下要传递给查询的参数
- ID
- 姓名
在我的表中, id 是一个数字字段,而 name 是一个字符串。现在,即使参数化查询中的名称数组由字符串值组成,最终生成的查询也没有字符串形式的名称,因此查询失败。如果我从查询中删除名称并单独使用 Id 运行它,它就可以工作。这是我的查询的样子。
ids = [1,2,3,4,5,6]
names = ["john", "rocky", "sam", "alice"]
const sqlQuery = 'SELECT * FROM `table_name_here` WHERE id IN UNNEST ([' + Ids + ']) AND name IN UNNEST ([' + Names + '])';
**final generated query that runs on bigquery**
SELECT * FROM `jenkins_notifications.prod_notifications_build` WHERE id IN UNNEST ([1,2,3,4,5,6]) AND name IN UNNEST ([john, rocky, sam, alice])
The final query should be like
SELECT * FROM `jenkins_notifications.prod_notifications_build` WHERE id IN UNNEST ([1,2,3,4,5,6]) AND name IN UNNEST (["john", "rocky", "sam", "alice"])
解决方案
解决问题的最简单最快的方法是在下面使用名称
names = ["'john'", "'rocky'", "'sam'", "'alice'"]
或者,更好的选择是使用地图功能
names.map(function(name) {return "'" + name + "'";}).toString()
如下例所示
ids = [1,2,3,4,5,6]
names = ["john", "rocky", "sam", "alice"]
const sqlQuery = 'SELECT * FROM `table_name_here` WHERE id IN UNNEST ([' + Ids + ']) AND name IN UNNEST ([' + names.map(function(name) {return "'" + name + "'";}).toString() + '])';
推荐阅读
- ios - 监听 ObservableObject 的变化(使用 Travis CI)
- c# - C# ASP.net MVC 读写 SQL(连接前端和后端)
- python - Django - 成员资格匹配查询不存在
- virtual-machine - 可以继承分支预测优化吗?
- c++ - C ++将浮点数乘以分数
- laravel - 验证用户电子邮件而不重定向到 Laravel 中的 RESTFUL API
- python - python - 如何在所有输入都在一行中的python列表中输入?
- android - BottomAppBarr 改变缺口形状的颜色
- python - 如何在 Colab 中打印新行?
- java - 合并两个排序的链表。有没有更好的方法在 java 中创建新的链表头?