mysql中使用逻辑判断_SQL语句技巧:查询时巧用OR实现逻辑判断

首先看以下SQL逻辑语句块:DECLARE @fieldname varchar(50)

DECLARE @fieldvalue nvarchar(100)

SET @fieldname='chassisno' --这里可传入chassisno,plateno,owner,contacttelno其中之一或不传

SET @fieldvalue='Zuowenjun'

IF @fieldname = 'chassisno'

BEGIN

SELECT * FROM TABLENAME WHERE chassisno=@fieldvalue

END

ELSE IF @fieldname = 'plateno'

BEGIN

SELECT * FROM TABLENAME WHERE plateno=@fieldvalue

END

ELSE IF @fieldname = 'owner'

BEGIN

SELECT * FROM TABLENAME WHERE [owner]=@fieldvalue

END

ELSE IF @fieldname = 'contacttelno'

BEGIN

SELECT * FROM TABLENAME WHERE contacttelno=@fieldvalue

END

ELSE

BEGIN

SELECT * 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两边的条件只能满足其中之一即可,不知道大家明白没有,当然如果有更好的方法或不同的意见欢迎交流,共同进步!

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL复杂逻辑是指在关系型数据库使用结构化查询语言(SQL)编写的逻辑操作,用于处理具有较高复杂性和难度的数据查询、操作和分析需求。这些复杂逻辑可以包括多个查询条件、多个数据表的关联、子查询、嵌套查询逻辑运算符等等。 首先,复杂逻辑可以包括多个查询条件的组合。通过使用AND和OR逻辑运算符,可以对不同条件进行组合查询,以筛选出符合要求的数据。 其次,复杂逻辑可以涉及多个数据表的关联。通过使用JOIN操作,可以将多个数据表按照指定的关联条件连接在一起,以实现数据的联合查询与分析。 此外,复杂逻辑还可以包括子查询和嵌套查询。子查询是在一个查询语句嵌套另一个查询语句,用于提供更精确的数据筛选和过滤。嵌套查询则是在子查询的基础上,再次嵌套查询,以实现更为复杂的数据分析和逻辑处理。 最后,复杂逻辑还可以通过使用逻辑运算符(如CASE语句、IF语句等)来实现数据的逻辑判断和条件分支。这些逻辑运算符可以根据不同条件的满足情况,执行相应的逻辑判断和操作。 总之,SQL复杂逻辑是在关系型数据库使用SQL编写的具有较高复杂性和难度的数据查询、操作和分析逻辑。通过组合查询条件、数据表的关联、子查询、嵌套查询逻辑运算符等手段,可以实现更精确和复杂的数据处理需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值