WHERE col IN 以空数组作为参数的查询

2024-02-27

从例子where-col-in 示例 https://github.com/vitaly-t/pg-promise/wiki/Learn-by-Example#where-col-in-values and 这个答案 https://stackoverflow.com/a/36847936/3563619, WHERE IN子句应包含带有以下语法参数的查询

const response = await db.any('SELECT * FROM table WHERE id IN ($1:csv)', [data])

其中 data 是一个数组。

现在,当 data 是空数组时,它会生成以下查询

 SELECT * FROM users WHERE id IN ()

这是一个语法错误。

考虑以下陈述:

  • 这有效

    const x = await db.any('SELECT * FROM table WHERE id IN ($1:csv)', [[1, 2, 3]]);
    
  • 这不起作用

    const y = await db.any('SELECT * FROM table WHERE id IN ($1:csv)', [[]]);
    

A 类似的错误 https://github.com/hiddentao/squel/issues/179报告为squel图书馆有关于如何的答案knex和红宝石的sequel在这种情况下表现。

这是一个错误还是我做错了什么?是否有适用于这两种情况的替代语法。


例如,使用替代查询ANY适用于两种情况:

await db.any(`SELECT * FROM table WHERE id = ANY($1)`, [[1, 2, 3]]);
await db.any(`SELECT * FROM table WHERE id = ANY($1)`, [[]]);

最好的方式应该是什么WHERE col IN还可以将空数组作为参数处理的查询?


Library pg-承诺 https://github.com/vitaly-t/pg-promise让您完全自由地生成任何您想要的 SQL,它不会以任何方式验证或控制它,因为它不是 ORM。

CSV 过滤器 https://github.com/vitaly-t/pg-promise#csv-filter是通用的,它可以在各种上下文中用于生成查询。所以当你专门使用它时IN ($1:csv),它不知道,并再次产生通用输出。

根据我留下的评论这个问题 https://github.com/vitaly-t/pg-promise/issues/442,正确的方法是检查数组中是否有任何数据,如果没有,则根本不执行查询。首先,查询将是无效的,即使你用一些空逻辑修补它,也意味着它不会生成任何结果,并且执行这样的查询会浪费IO。

let result = [];
if (data.length) {
    result = await db.any('SELECT * FROM table WHERE id IN ($1:csv)', [data]);
}
/* else: do nothing */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WHERE col IN 以空数组作为参数的查询 的相关文章

随机推荐

  • 从 Ada 访问 c 常量

    我有一个带有这样类型定义的头文件 ifndef SETSIZE define SETSIZE 32 endif typedef struct set unsigned array SETSIZE set t 要使用相应的 C 函数 我需要在
  • jquery 获取之前输入的文本

    我有以下 html div class active string div
  • 将大文件作为流发送到 process.getOutputStream

    我在 Windows 机器中使用 gzip 实用程序 我压缩了一个文件并作为 blob 存储在数据库中 当我想使用 gzip 实用程序解压缩此文件时 我将此字节流写入 process getOutputStream 但超过30KB后 就无法
  • Android 绘制点

    如何用画布绘制完整的圆或点 我使用画布和路径 绘画类 my code Override public boolean onTouchEvent MotionEvent event float eventX event getX float
  • 如何向谷歌图表中的图例添加工具提示

    使用最新版本的 Google Charts API 我有一个简单的条形图 我想在将鼠标悬停在图例中的元素上时显示一个工具提示 解释图例中的每个项目是什么 我仍然希望栏上的工具提示保持不变并显示其标签和值
  • 使用 GSM 调制解调器接收短信

    我读到 GSM 调制解调器每分钟最多只能接收 30 条短信 如果您需要收到更多 您会怎么做 还有其他技术吗 我认为您可能想要与列出的答案不同的东西构建短信服务器的最佳实践是什么 https stackoverflow com questio
  • 多态关联

    如果您具有多态belongs to关联 那么引用将添加所需的两列 create table products do t t references attachment polymorphic gt default gt Photo end
  • 我应该为范围最小查询使用什么使用 O(n) 存储和 O(log n) 查询时间的数据结构?

    我被算法课的以下作业问题难住了 Suppose that we are given a sequence of n values x1 x2 xn and seek to quickly answer repeated queries of
  • 鲍尔畸形

    我正在学习如何使用 Bower 为了开始 我创建了一个基本的 Bower json 文件 其职责是获取 jquery 我的 Bower json 文件如下所示 name MyProject version 0 0 1 devDependen
  • python 中的私有公共受保护访问说明符

    我们可以在Python中模拟私有和受保护的访问说明符吗 名称修改 eg var 10 可以模拟私有 但可以通过对象轻松地从外部访问 object className var 那么有没有一种方法可以模拟 或者 python 是否直接是我不知道
  • C#中使用ffmpeg提取帧时帧率慢且资源占用高

    我目前正在开发一个项目 需要在 C 中使用 ffmpeg 从视频中提取帧 但是 我面临帧速率慢和资源使用率高的问题 我使用的代码如下 private bool move false private int master frame 0 pr
  • C 流:直接将数据从一个流复制到另一个流,不使用缓冲区

    我想将数据从一个流复制到另一个流 现在通常情况下 我会这样做 n fread buffer 1 bufsize fin fwrite buffer 1 n fout 有没有办法直接写入数据fin to fout 不经过缓冲区 即代替fin
  • 删除 XDocument 中的所有评论

    我正在阅读 XDocument 如何从 XDocument 中删除所有注释行 我尝试过 doc DescendantNodes Where x gt x NodeType XmlNodeType Comment Remove 但这仅删除带有
  • ASP.NET MVC 3:需要部署哪些 dll?

    在未安装 ASP NET MVC 3 的服务器上部署 ASP NET MVC 3 应用程序时 哪些文件需要将 复制本地 标记为 True From http www hanselman com blog BINDeployingASPNET
  • 使用 iTextSharp 将块的一部分右对齐

    我是 iTextSharp 新手 我正在尝试创建 PDF 只是一个简单的例子 如果我做这样的事情 Paragraph p new Paragraph p Add new Chunk 789456 Test f5 newDocument Ad
  • 无法使用 MSSQL 在 PDO 中引用表名

    我必须使用某人的数据库来开发游戏 遗憾的是该游戏有一个名为 User 或 dbo User 的表 并且无法重命名 现在 我需要在 PHP 中使用 PDO 访问它 并且当我使用此查询时 query SELECT UserId AS INTUS
  • 在 C++ 文件 CDT 中包含 Python.h

    如果这是一个愚蠢的问题 我深表歉意 但我尝试用谷歌搜索这个 但找不到任何可以指引我正确方向的东西 我只是想了解我需要做什么来 设置 cdt 以 理解 我的 python h 包含内容 错误的说法是这样的 include
  • 确保派生类构造函数必须调用特定基类方法

    在 C 03 类中 我有一个成员变量 它must在对象构造期间被赋值 但是 只有派生类可以计算所需的值 正如这篇文章中所讨论的C 是否要求从派生类初始化基类成员 https stackoverflow com questions 12169
  • 有效地计算组合和排列

    我有一些代码来计算排列和组合 并且我正在努力使其更好地处理大量数字 我找到了一种更好的排列算法 可以避免大量的中间结果 但我仍然认为我可以在组合方面做得更好 到目前为止 我已经提出了一个特殊情况来反映 nCr 的对称性 但我仍然希望找到一种
  • WHERE col IN 以空数组作为参数的查询

    从例子where col in 示例 https github com vitaly t pg promise wiki Learn by Example where col in values and 这个答案 https stackov