首先看以下SQL逻辑语句块:

DECLARE @fieldname    varchar(50)
DECLARE @fieldvalue nvarchar(100)SET @fieldname='chassisno' --这里可传入chassisno,plateno,owner,contacttelno其中之一或不传
SET @fieldvalue='Zuowenjun'IF @fieldname = 'chassisno'
BEGINSELECT * FROM TABLENAME WHERE chassisno=@fieldvalue
END
ELSE IF @fieldname = 'plateno'
BEGINSELECT * FROM TABLENAME WHERE plateno=@fieldvalue
END
ELSE IF @fieldname = 'owner'
BEGINSELECT * FROM TABLENAME WHERE [owner]=@fieldvalue
END
ELSE IF @fieldname = 'contacttelno'
BEGINSELECT * FROM TABLENAME WHERE contacttelno=@fieldvalue
END
ELSE
BEGINSELECT * FROM TABLENAME
END

现在如果需要用一句SQL语句就要实现上述逻辑判断并查询结果,大家可能会想到采用如下拼接的方法实现:

DECLARE @sqltext NVARCHAR(2000)SET @sqltext='SELECT * FROM TABLENAME WHERE ' + @fieldname + '=''' + @fieldvalue +''''
EXECUTE (@sqltext)

虽然这样看起来确实能实现逻辑判断并查询结果,但看起来不够直观,修改麻烦且容易出错,而且有一定的局限性,因为这里@fieldname与表字段相同,拼接相对容易些,若不相同的情况下,那就无法实现了,所以我这里采用了另一种方法,效率暂且不说,但绝对简单易用而且够灵活,请看如下SQL语句:

SELECT * FROM TABLENAME a WHERE 1=1 --(如果需要其它条件则用其它条件,否则可以这样或不要,如果不要则下面的第一个AND需去掉)
AND ((@fieldname = 'chassisno' AND a.chassisno=@fieldvalue) OR (@fieldname<>'chassisno') )
AND ((@fieldname = 'plateno' AND a.plateno=@fieldvalue) OR (@fieldname<>'plateno') )
AND ((@fieldname = 'owner' AND a.[owner]=@fieldvalue) OR (@fieldname<>'owner') )
AND ((@fieldname = 'contacttelno' AND b.contacttelno=@fieldvalue) OR (@fieldname<>'contacttelno') )

经验证这条SQL语句可以实现逻辑判断并查询结果,而且就算@fieldname与表字段不相同,我们也可以直接更换相应的字段即可,现在来简要说明一下其原理:

AND ((@fieldname = 'chassisno' AND a.chassisno=@fieldvalue) OR (@fieldname<>'chassisno') )

因为是AND关联,所以后面括号里面的条件是必须满足,又因为括号里面采用了OR关联,所以括号里面的两边的条件是可以符合一个即可的,翻译一下就是,若@fieldname = 'chassisno'时,则要求a.chassisno=@fieldvalue,否则只要@fieldname<>'chassisno'时,则忽略掉前前面的关联条件。注意他们的特点是互斥的,也就是OR两边的条件只能满足其中之一即可,不知道大家明白没有,当然如果有更好的方法或不同的意见欢迎交流,共同进步!

更多IT相关的文章,欢迎光临我的个人网站:http://www.zuowenjun.cn/

本文转自 梦在旅途 博客园博客,原文链接:http://www.cnblogs.com/zuowj/p/4123207.html  ,如需转载请自行联系原作者

SQL语句技巧:查询时巧用OR实现逻辑判断相关推荐

  1. 如何在 Linux 上用 SQL 语句来查询 Apache 日志

    Linux 有一个显著的特点,在正常情况下,你可以通过日志分析系统日志来了解你的系统中发生了什么,或正在发生什么.的确,系统日志是系统管理员在解决系统和应用问题时最需要的第一手资源.我们将在这篇文章中 ...

  2. java sql范围查询语句,java类中写sql语句,查询条件包含换行

    java类中写sql语句,查询条件包含换行 detachedCriteria.add(Restrictions.or( Restrictions.like("chengBanDanWeiId ...

  3. Python与开源GIS:在OGR中使用SQL语句进行查询

    属性选择与空间选择都可以看作是OGR内置的选择功能,这两种功能可以解决大部分实际中的问题.但是也有这种时候,就是进行查询时的条件比较复杂.针对这种情况,OGR也提供了更加灵活的解决方案:支持使用SQL ...

  4. mysql查询选课程的学生学号和姓名_数据库SQL语句中查询选修了全部课程的学生的学号和姓名理解...

    首先头脑中有三点概念: 1.EXISTS子查询找到的提交 NOTEXISTS子查询中找不到的提交 说明:不要去翻译为存在和不存在,把脑袋搞晕. 2.建立程序循环的概念,这是一个动态的查询过程.如FOR ...

  5. java mysql查询字段换行,java类中写sql语句,查询条件包含换行

    java类中写sql语句,查询条件包含换行 detachedCriteria.add(Restrictions.or( Restrictions.like("chengBanDanWeiId ...

  6. PHP获取MySQL执行sql语句的查询时间

    PHP获取MySQL执行sql语句的查询时间 1. $t1=microtime(true); mysql_query($sql); echo microtime(true)-$t1; 2. //计时开 ...

  7. Mybatis映射文件SQL语句模糊查询,#和$的区别和注意事项

    Mybatis映射文件SQL语句模糊查询 1. "%"#{value}"%" 在参数中不需要添加 %_ 推荐使用 2. '%${value}%' 在参数中不需要 ...

  8. sql语句连接查询.

    sql语句连接查询. 接触sql语句这么长时间了,牵涉到连接的时候,总是google别人的. 今天好好学学sql 的连接查询 准备工作 : mysql5.6 建表语句 查询语句 select p.id ...

  9. sql 语句 将查询结果中数字等标示转成汉字

    sql 语句  将查询结果中数字等标示转成汉字 --使用case 语句 将state字段进行转换 0 1  2  正常.删除.禁用 SqlServer: select name,age,sex,sta ...

最新文章

  1. const_cast的应用
  2. 粉丝福利,送10个程序员专用机械键盘
  3. Java 并发编程CyclicBarrier的应用与源码解析(基于ReentrantLock实现)
  4. Java基础学习 -- I/O系统、流
  5. 2018-2019-2 20175308实验一 《Java开发环境的熟悉》实验报告
  6. 洛谷P3941入阵曲
  7. Median of Two Sorted Arrays@LeetCode
  8. Windows 10 超过Windows 7成为最受欢迎的操作系统
  9. 全国省市县三级数据库
  10. 正规的伦敦金投资平台排行榜(top 10)
  11. 移动app需求分析与用例设计
  12. 美国犹他大学计算机专业怎么样,犹他大学最热门专业,了解一下?
  13. ffmpeg视频剪切与拼接
  14. Java程序设计基础【4】
  15. C语言基本数据类型之整型变量
  16. 计算机理论知识论文,理论知识:计算机科学与技术硕士毕业论文写作方法
  17. springboot好博客记录
  18. Ant安装及环境变量配置+邮件配置+Ant生成接口测试报告
  19. 【JavaScript】JS校验MAC地址
  20. 欧姆龙 CJ1W-SCU LinkWord功能

热门文章

  1. 「NLP」用于序列标注问题的条件随机场
  2. 浅析丨AI安防产品发展现状与趋势分析
  3. RPA和AI:加速数字化转型的步伐
  4. 为何艾伦·图灵想让AI智能体故意犯错
  5. SAP MM 启用批次管理的物料MB21创建预留单据时批次号可以为空!
  6. Python 之 matplotlib (十六)Animation动画
  7. 什么是1+N模式的新一代城市大脑建设方案
  8. 波士顿动力的仓库机器人Strentch来了,挑战每小时搬运800个箱子
  9. 深度学习中的3个秘密:集成、知识蒸馏和蒸馏
  10. 加大基础研究投入 给科技创新注入“强心剂”