如何优雅地拼SQL的in子句
============================================
in 语句如何优雅拼接 name list
============================================
在项目中, 经常会碰到这样的场景, 要按 name list 获取这些name对应的记录, 比如要获取 KING,JONES,FORD 对应的记录, 显然想到的是使用 in 子句,
比如: select id from Employee where Emp_Name in ('KING','JONES','FORD')
有几种做法:
1. 硬拼 SQL的方法, 比如 sql = "select id from Employee where Emp_Name in ( "+ " 'KING','JONES','FORD' " +")"
问题是代码可读性非常差, 需要先将 name list 打散, 然后为每个 name先包一个单引号, 然后再套一个循环, 构建完整的 in 子句.
2. 使用 Connect by 的写法(SQL server 对应的有 Split table function)
1 2 3 4 5 6 7 8 9 10 11 12 | Select id From Employee Where Emp_Name In ( Select Regexp_Substr( 'KING,JONES,FORD' , '[^,]+' ,1 , Level ) Emp_Name From Dual Connect By Regexp_Substr( 'KING,JONES,FORD' , '[^,]+' ,1 , Level ) Is Not Null ); |
貌似代码很长, 但可读性非常好, 只要传两次 name list 即可. 不需要打散name list, 不需要为单个name包单引号, 不需要使用循环重新构建一个带单引号的 name list.
3. 使用
1 2 3 | Select id From Employee Where Emp_Name In table (split( 'KING,JONES,FORD' , ',' )) |
结论, 推荐使用第2和第3种写法.
============================================
like 如何优雅拼接 name list
============================================
in 子句可以将多个候选条件集中在一起, like 操作符没有同样的语法, 但我们可以使用正则表达式达到类似的效果.
select id from Employee Where Emp_Name regexp_like (emp_name '^KING|JONES|FORD')
等同于
select id from Employee Where Emp_Name like 'KING%'
or Emp_Name like 'JONES%'
or Emp_Name like 'FORD%'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律