SQL WHERE IN参数化编译写法简单示例_数据库其它

来源:脚本之家  责任编辑:小易  

where 后面是一个条件式,表示要找出满足这个条件的结果in 里面是个子查询或者给定的值比如 select*from student where Sname='张三';查询姓名叫张三的学生的信息*/select*from student where Sname in('张三','李四');查询张三和李四的学生的信息*/select*from student where Sname in(select Sname from sn where Sno='001');查询学号是001的学生信息*/不知道能不能看懂,怪乱的www.zgxue.com防采集请勿采集本网。

前言

最近在一次使用sql中的where in语句时,造成了一些非预期的查询结果。尤其是在代码中去编写并执行sql语句时,会出现一些意外情况。再查阅了一些资料以及手动测试后,发现是自己sql语句写法存在问题,在此记录。

你的语句有问题应该这样 select id,name from test where id in('1001','1005','1003');如果你想按顺序的话 这样就可以 select id,name from test where id='1001' union all select id,name

例子

业务需求,需要通过SQL语句从asset资产表中查询域名字段在(“thief.one”,”nmask.cn”,”sec.thief.one”)范围内的数据库记录,SQL语句该怎么写呢?

中文也是字符串,条件写对是没有问题的

拼接法(错误)

我勒个去… SELECT*FROM A WHERE A.A IN(SELECT*FROM B) IN只能查一个数据在另一个数据集里的结果,不能查一个数据集在另一个数据集中的结果。

select*from aa where id in(select*from bb) 可以这样写的,后面的*号改成需要的字段名

values = "'thief.one','nmask.cn','sec.thief.one'"sql = "select * from asset where domain in ("+values+")"print sql

这样肯定不行 你的参数必须是一个集合,如 or inv_type in('A','a') 当你的参数为@inv_type='N','A'时,你可以这样用动态SQL来解决 v_sql varchar2(400);v_sql:='select*from tab where 条件1 or

说明:通过将搜索条件以字符串拼接的方式构造sql语句,语法上可通过,但存在着安全隐患(参照sql注入漏洞)

参数化1(错误)

values = (("thief.one","nmask.cn","sec.thief.one"),)sql = "select * from asset where domain in %s"print sqlprint values

说明:通过参数化方式,将where in 后面的查询内容传入。表面上看没问题,但在编译过程中,会将(“thief.one”,”nmask.cn”,”sec.thief.one”)整体看成一个字符串,而作为查询条件,与需求不符合。

参数化2(正确)

values = ("thief.one","nmask.cn","sec.thief.one")sql = "select * from asset where domain in ({})".format(",".join(['%s' for i in values]))print sqlprint values

说明:通过计算values里面字符串个数,动态构造编译的参数。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对真格学网的支持。

方法二肯定不行,@id是字符串不是集合方法一中要这样写:set@SelectText='update ffzs_unit set unitname='''+name+''' where uid in('+id+')'对于SQL中,字符串要有单引号你不要execute(@SelectText)先改成 select@SelectText看看输出的字符串到底是什么,然后在查询分析器中测试一下语法,再改原有的内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • mysql的where语句中between与in的使用教程
  • mysql 存储过程传参数实现where id in(1,2,3,...)示例
  • 解析sql语句中left_join、inner_join中的on与where的区别
  • 程序员应该知道的数据库设计的两个误区
  • mssql内连接inner join查询方法
  • 数据库 三范式最简单最易记的解释
  • 复杂系统中的用户权限数据库设计解决方案
  • maven nexus 安装nexus私服出现的问题和解决办法
  • sql小计汇总 rollup用法实例分析
  • sql四舍五入、向下取整、向上取整函数介绍
  • sql数据库与oracle数据库镜像有什么不同对比
  • 推荐sql server一些常见性能问题的解决方法
  • 数据库语言分类ddl、dcl、dml详解
  • SQL 存储过程 where in 的问题 带参数的!!
  • sql中,In和where的区别是啥
  • sql 中where条件用了in可是()中的具体参数个数不知道。怎么解决呀?
  • SQL where in条件的问题
  • SQL where in 语句顺序问题
  • sql 如何写包含多个值的条件? 重点:值是中文!用where in('一','二')这样查出的结果不对!
  • 关于 sql 语句 where in 的问题
  • sql select where in的优化要怎样做?
  • 关于SQL的Where子句中的In的问题。(急)
  • sql语句的书写 where in
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页数据库其它mysql的where语句中between与in的使用教程mysql 存储过程传参数实现where id in(1,2,3,...)示例解析sql语句中left_join、inner_join中的on与where的区别程序员应该知道的数据库设计的两个误区mssql内连接inner join查询方法数据库 三范式最简单最易记的解释复杂系统中的用户权限数据库设计解决方案maven nexus 安装nexus私服出现的问题和解决办法sql小计汇总 rollup用法实例分析sql四舍五入、向下取整、向上取整函数介绍sql数据库与oracle数据库镜像有什么不同对比推荐sql server一些常见性能问题的解决方法数据库语言分类ddl、dcl、dml详解sql join on 用法mysql mysqldump命令使用详解sqlserver、mysql、oracle三种数sql中代替like语句的另一种写法如何让sql运行得更快关于adox的相关知识如何取得一个表的所有字段名用逗sql server下数据库链接的使用方sql server 2005的表分区sql 查询语句积累深入解析nosql数据库的分布式算法(图文详sql server的字段类型说明jdbc 数据库常用连接 链接字符串maven nexus 安装nexus私服出现的问题和解为什么你不要收缩数据库文件(国外翻译)数据库为何要建立索引的原因说明sql中where子句与having子句的区别小结数据库测试 实用技巧及测试方法redis数据库查找key在内存中的位置的方法比较sql server与oracle、db2数据库的一些
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved