sql语句的逻辑问题。。。

问题描述

sql语句的逻辑问题。。。
SELECT * FROM tablename WHERE 条件1 AND 条件2 OR 条件1 AND 条件3 OR 条件1;

我想要WHERE后面的条件按顺序来判断,就是 【条件1 AND 条件2】 若不满足就判断 【条件1 AND 条件3】 再不满足就判断 【条件1】;

可是好像是短路效应似的,它会不按顺序来,若最后一个【条件1】满足了,就不会判断前面两个,相当于前面两个白写了。。。请问怎么才能让者三个【xx】按顺序判断呢?

解决方案

这个问题我验证了一下是存在的,因为sql的where执行顺序是从右到左的,所以就会先判断后面的条件,要是想按自己的顺序执行的话可以把需要先判断的条件放在后面(即右面)。
可以看一下这篇文章里面的:SQL where 条件顺序对性能的影响有哪些 (里面写的挺清楚的)
http://ljh0721.iteye.com/blog/1974161

解决方案二:
可是事实上他就是按照这个逻辑进行判断的,最好写成(条件1 AND 条件2) OR (条件1 AND 条件3) OR 条件1

解决方案三:
条件是按照顺序判断的,如果前面判断为真,后面才会逻辑短路。

解决方案四:
使用动态生成sql语句:

   if  条件1 AND 条件2 then  temp = SELECT * FROM tablename WHERE 条件1 AND 条件2         else            if 条件1 AND 条件3 then    temp = SELECT * FROM tablename WHERE  条件1 AND 条件3        end if

解决方案五:
像oracle和sqlserver会根据语句进行优化,不一定按照你希望的顺序,如果你想知道记录是哪个条件查出来的,那用union

 SELECT tablename.*'条件1' FROM tablename WHERE 条件1 AND 条件2 unionSELECT  tablename.*'条件2'  FROM tablename WHERE  条件1 AND 条件3 unionSELECT  tablename.*'条件3'  FROM tablename WHERE  条件1;

解决方案六:
根据你的描述,如果确实只需要满足条件1就能查出来,那么前两个条件是不用写的。

解决方案七:
如果确实只需要满足条件1就能查出来,那么前两个条件是不用写的。

解决方案八:
Where 子句适当加上括号,现在这个会产生歧义的。

解决方案九:
因为不知道你的条件到底是怎样写的,可以给你提供两种方式,一:声明变量,用if语句判断,例如我之前写过的部分语句
declare @flag indeclare @flag int
declare @fla int
set @flag=(select count(*) from Area where dbo.fn_GetPy(AreaName) like '%'+@str+'%')
set @fla=(select count(*) from Area where dbo.f_GetP(AreaName) like '%'+@str+'%')
if @flag>0
select AreaName from Area where dbo.fn_GetPy(AreaName) like '%'+@str+'%'
else
if @fla>0
select AreaName from Area where dbo.f_GetP(AreaName) like '%'+@str+'%'
else
select AreaName from Area where AreaName like '%'+@str+'%''
第二种
直接用case when 判断 这两种都是按顺序判断的_

解决方案十:
就是按照这个逻辑进行判断的,最好写成(条件1 AND 条件2) OR (条件1 AND 条件3) OR 条件1

条件是按照顺序判断的:
如果前面判断为真,后面才会逻辑短路;
如果后边判断为真,前面是的假 又是或关系 当然前边的两个就相等于无用条件了

时间: 2025-01-10 10:17:42

sql语句的逻辑问题。。。的相关文章

select-sql语句的逻辑问题。。。

问题描述 sql语句的逻辑问题... 语句出错了,如下: $_sql = "SELECT COUNT(*) FROM cms_content c,cms_nav n WHERE c.nav=n.id AND c.nav IN (SELECT id FROM cms_nav WHERE pid='$this->nav') OR c.nav='$this->nav'"; 模型就是 SELECT * FROM tablename WHERE 条件1 AND 条件2 OR 条件3:

sql-求大神指导SQL语句怎么写

问题描述 求大神指导SQL语句怎么写 建立了一张活动表 actid int primary key identity(1,1), actname varchar(50) not null, actshort varchar(200) not null, actlong varchar(1000) not null, actaddress varchar(100) not null, actgoway varchar(200) not null, volshort varchar(100), vo

T-sql语句修改SQL Server数据库逻辑名、数据库名、物理名的方法_MsSql

本文实例讲述了T-sql语句修改SQL Server数据库逻辑名.数据库名.物理名的方法.分享给大家供大家参考,具体如下: 更改MSSQL数据库物理文件名Sql语句的写法 注意:要在活动监视器里面确保没有进程连接你要改名的数据库!!!!!!!!!!!!!!!!!!!! Sql语句如下 USE master --改逻辑名 ALTER DATABASE YQBlog MODIFY FILE(NAME='YQBlogAA',NEWNAME='YQBlog') -- GO ALTER DATABASE

把业务逻辑变成数据结构和SQL语句的例子。自然架构改成自然框架

      更正:和大家交流了一下,发现现在就叫做架构有一点大,还是叫做框架更准确一些,就叫做自然框架吧.     目前自然框架的内容包括三个部分:使用自定义控件快速实现增删改查和导出Excel.通用权限.个性化设置.       上一篇里 球球 同学询问"不太明白需求是怎么转化为数据库的.比如一个最简单的会员例子,累计1万消费以上是一级会员,5000消费以上是2级会员,买商品属于1级会员的8折,属于2级会员的9折,这个业务逻辑要怎么转化成数据库?"那我就以这个作为例子说一下吧.  

sql语句-mysql定时任务 写下SQL语句

问题描述 mysql定时任务 写下SQL语句 想让MYSQL里面的jpzh表里面的isstaus在晚上00定时更新 那个大侠 写下SQL语句 解决方案 CREATE EVENT e_testON SCHEDULE EVERY 1 DAYSTARTS '2014-12-04 00:00:00'DO UPDATE jpzh SET isstaus=.....; 从 2014-12-04 00:00:00 开始,每天做一次 解决方案二: 你的逻辑好像不太对,按常理开发模式,一般是从应用端控制时间,然后

通过分析SQL语句的执行计划优化SQL(二)

优化|语句|执行 第5章 ORACLE的执行计划 背景知识:        为了更好的进行下面的内容我们必须了解一些概念性的术语: 共享sql语句    为了不重复解析相同的SQL语句(因为解析操作比较费资源,会导致性能下降),在第一次解析之后,ORACLE将SQL语句及解析后得到的执行计划存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享.因此,当你执行一个SQL语句(有时被称为一个

实战SQL语句收集(不断更新中--)

语句 实战SQL语句收集(不断更新中--) 前言:这里将我编程实践中遇到的有价值的sql语句一路记下来,一方面方便自己查用,一方面也夯实下即将遗忘的回忆.整个过程中我会不断更新,直到不能再加为止,同时,这里只记录最实用的咚咚,不效仿学院派的那一套. 一.常用SQL语句荟萃 1,查询: 1.1,简单查询:select * from table where   1.2,连接查询: 什么是连接查询?顾名释义,就是查询时涉及多个表的查询.是以说到连接,废话一下,要知道连接还是关系数据库的主要特点呢. 连

SQL语句的自动优化

优化|语句 在数据库应用系统中编写可执行的SQL语句可以有多种方式实现,但哪一条是最佳方案却难以确定.为了解决这一问题,有必要对SQL实施优化.简单地说,SQL语句的优化就是将性能低下的SQL语句转换成达到同样目的的性能更好的SQL语句. 优化SQL语句的原因 数据库系统的生命周期可以分成: 设计.开发和成品三个阶段.在设计阶段进行优化的成本最低,收益最大.在成品阶段进行优化的成本最高,收益最小.如果将一个数据库系统比喻成一座楼房,在楼房建好后进行矫正往往成本很高而收效很小(甚至可能根本无法矫正

改进数据库SQL语句进行优化的理由

数据|数据库|优化|语句 应用程序的优化通常可分为两个方面:源代码的优化和SQL语句的优化.源代码的优化在时间成本和风险上代价很高:另一方面,源代码的优化对数据库系统性能的提升收效有限. 优化的理由 1)SQL语句是对数据库(数据)进行操作的惟一途径: 2)SQL语句消耗了70%~90%的数据库资源: 3)SQL语句独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低: 4)SQL语句可以有不同的写法: 5)SQL语句易学,难精通. 优化技术的发展 第一