SheepDev

SQL与测试数据

将 ID 或名称列表转为 SQL IN 子句

使用工具

给商品代码加引号和逗号看似机械,但 001 若当数值会变成 1,NULL 是否加引号也改变含义。IN 生成器能整理表达式,却不能猜列类型和意图,应先用小例子检查表示。

纯数字代码也可能是字符串

逐行输入 001、010、O'Reilly,选择字符串、列 code。PostgreSQL 示例得到 '001'、'010'、'O''Reilly'。前导零保留,内部单引号加倍;类型应由目标列意义决定,不能只看是否数字。

字符串条件示例
"code" IN ('001', '010', 'O''Reilly')

列名留空仅生成括号值列表,无法从输出知道目标列,审核时带列名更明确。标识符输入受限,不是任意 SQL 表达式入口;复杂表达式应另查生成部分如何嵌入。

了解空行与重复的处理

一行一值,首尾空白会删除、空行忽略、完全相同字符串去重,因此不适合保留有意义的首尾空格或直接表示空字符串。这里也不是 CSV 解析器,粘贴逗号行前先确认格式。

去重依据文本相等,不模拟数据库数值或排序规则。1 与 01 可保留为不同输入,却在数值比较中相等,大小写也取决数据库排序条件。因此输入数量不一定等于结果数量。

IN 内写 NULL 不等于 IS NULL

查四字母文本 NULL 应用 'NULL',查 SQL 空值则不同。选择单独条件策略并指定列,会在普通 IN 之外生成 IS NULL。若意图不明,可用拒绝策略先停下确认。

将 alpha 与 SQL NULL 分开
("code" IN ('alpha') OR "code" IS NULL)

OR 整体带括号,避免并入 AND 时意外扩大范围。含 NULL 时,把 IN 文字替换成 NOT IN 不一定得到预期补集。应先列出要包含和排除的具体行,再设计否定条件。

应用查询要使用正确参数绑定

示例引用正确不意味着应用可直接拼接用户输入,应使用驱动参数绑定,将值和结构分开。占位符转换可检查写法与对应,但不验证真实连接或执行安全。

尤其 MySQL,应按执行设置和实际字符串复核引用规则,工具不保证所有数据库配置兼容。大列表还有参数上限、语句长度和执行计划问题,能生成长 IN 不等于适合或高效。

使用前回看原始列表

检查目标列、类型、前导零、引号、空行、重复和 NULL 策略。格式化周边 SQL 可查看括号范围,并说明列表是全集还是子集。引用正确不能修复源数据遗漏。

浏览器生成不改数据库,复制到别处执行则是另一项操作。用于 UPDATE、DELETE 条件时须按目标环境审核授权。本文是整理可理解条件,先以小型虚构样本确认值的处理。

IN 列表顺序不决定结果顺序

IN 中写 B、A、C 不要求结果按此顺序返回,IN 判断成员而非展示顺序。需要排序应另行按数据库设计 ORDER BY 等。生成文字保留输入顺序不等于返回行有序,目视逐行核对前应确定稳定键。

IN 重复一个值不要求重复返回行,但表里多行相同值可能都匹配。输入数与结果数不同还可能因不存在代码、类型、排序规则或原表重复。工具不连 DB,不能保证匹配几行。

大列表即使能生成仍可能超过 DB 文长或参数上限,工具上限不等于服务端上限。应用应选择参数绑定及合适批量匹配方式。可用本工具检查引用列表,但不能据此任意拼接用户输入。

参考资料

使用工具

指南 →